一、题目描述
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = “leetcode”
输出: 0
示例 2:
输入: s = “loveleetcode”
输出: 2
示例 3:
输入: s = “aabb”
输出: -1
提示:
1 <= s.length <= 105
s 只包含小写字母
二、题目解析
1、使用哈希表,key为字符,value为频次
class Solution {
public int firstUniqChar(String s) {
if(s == null || s.length() == 0){
return -1;
}
if(s.length() == 1){
return 0;
}
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;
}
}

2、使用哈希表,key为字符,value为是否出现重复字符
class Solution {
public int firstUniqChar(String s) {
if(s == null || s.length() == 0){
return -1;
}
if(s.length() == 1){
return 0;
}
Map<Character,Boolean> map = new HashMap<>();
for(int i = 0;i < s.length();i++){
map.put(s.charAt(i),!map.containsKey(s.charAt(i)));
}
for(int i = 0;i < s.length();i++){
if(map.get(s.charAt(i))){
return i;
}
}
return -1;
}
}


被折叠的 条评论
为什么被折叠?



