题目(难度:简单):
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
代码思想:
利用map结构,记录每个字符出现的次数,最后遍历map集合,取出现次数为1的元素
代码实现:
public int firstUniqChar(String s) {
if (s == null || s.length() == 0) return 0;
Map<Character, Integer> map = new LinkedHashMap<>();
char[] str = s.toCharArray();
for (int i = 0; i < str.length; i++) {
if (map.containsKey(str[i])) {
map.put(str[i], map.get(str[i])+1);
} else {
map.put(str[i], 1);
}
}
char tmp = ' ';
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
char key = entry.getKey();
int value = entry.getValue();
if (value == 1) {
tmp = key;
break;
}
}
for (int i = 0; i < str.length; i++) {
if (str[i] == tmp) {
return i;
}
}
return 0;
}
测试用例:
算法分析:
时间复杂度O(n),使用map集合,额外空间复杂度O(n)