The challenge
Given a string, find the first non-repeating character in it and return its index. If it doesn’t exist, return -1.
Examples:
s = "spacesuite"
return 1.
s = "simplespacesuite"
return 2.
Note: You may assume the string contains only lowercase English letters.
The solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class Solution {
// take in a String and return an int containing the index
public int firstUniqChar(String s) {
// create a HashMap to hold our counts
HashMap<Character, Integer> h = new HashMap<>();
// get the string's length
int len = s.length();
// loop to populate the HashMap
for(int i=0; i<len; i++) {
// get the Character
char c = s.charAt(i);
// add or update HashMap entry
h.put(c, h.getOrDefault(c, 0)+1);
}
// loop to look for non-duplicates
for(int i=0; i<len; i++) {
// get the Character
char c = s.charAt(i);
// if only have 1 item, then we found our match
if (h.get(c)==1)
return i;
}
// return -1 if all else fails
return -1;
}
}
|