1、题目描述
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = "leetcode"
返回 0
s = "loveleetcode"
返回 2
2、题目分析
- 与以往的题目不同,这个是找唯一的字符,那就需要遍历完成之后再二次遍历
- 首先考虑使用HashMap,再考虑使用字典
- 第一次遍历统计各个字符出现的次数,第二次遍历找仅出现一次的那个字符
3、代码实现
public int firstUniqChar1(String s) {
Map<Character,Integer> map = new HashMap<>();
for(int i = 0;i < s.length();i++){
map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0) + 1);
}
for(int i = 0;i < s.length();i++){
if(map.get(s.charAt(i)) == 1){
return i;
}
}
return -1;
}
public int firstUniqChar(String s){
int[] count = new int[26];
for(int i = 0;i < s.length();i++){
count[s.charAt(i) - 'a']++;
}
for(int i = 0;i < s.length();i++){
if(count[s.charAt(i) - 'a'] == 1) return i;
}
return -1;
}
4、复杂度分析
- 时间复杂度:O(N) 两次遍历
- 空间复杂度:O(∣Σ∣) 最多存储26个不重复字符