题目描述
Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
给定一个字符串,找到其中第一个非重复字符并返回它的索引。如果不存在,返回-1。
Examples:
s = "leetcode" return 0. s = "loveleetcode", return 2.
思路
这里最好的解决方案可能是线性时间,因为要确保元素是唯一的,你必须检查整个字符串。我们的想法是遍历字符串并在哈希映射中保存每个字符出现在字符串中的次数。 这将需要O(N)时间,其中N是字符串中的字符数。然后我们第二次浏览字符串,这次我们使用哈希映射作为参考来检查字符是否唯一。如果元素是唯一的,则可以返回其索引。 第二次迭代的复杂性也是O(N)。
class Solution {
public int firstUniqChar(String s) {
HashMap<Character, Integer> count = new HashMap<Character, Integer>();
int n = s.length();
// build hash map : character and how often it appears
for (int i = 0; i < n; i++) {
char c = s.charAt(i);
count.put(c, count.getOrDefault(c, 0) + 1);
}
// find the index
for (int i = 0; i < n; i++) {
if (count.get(s.charAt(i)) == 1)
return i;
}
return -1;
}
}