387. 字符串中的第一个唯一字符
题目
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = "leetcode"
返回 0
s = "loveleetcode"
返回 2
提示:你可以假定该字符串只包含小写字母。
解题思路
方法1
遍历字符串放入到HashMap中,key为每个字符,value为key在map中的个数,不存在为1,存在则+1,然后在一次遍历HashMap第一个为1的就是要返回的。
public static int getIndexByMap(String s) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
int index = -1;
for (int i = 0; i < s.length(); i++) {
char tmp = s.charAt(i);
map.put(tmp,map.getOrDefault(tmp,0)+1);
}
for (int i = 0; i < s.length(); i++) {
if (map.get(s.charAt(i)) == 1) {
index = i;
break;
}
}
return index;
}
这里用到了Map的一个方法
map.getOrDefault(tmp,0)
Returns the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key
这样就不用判断key是否存在,不存在设置value为1,存在为value++这样判断的语句了。
方法2
从前面和后面遍历字符,当前面遍历的index==后面遍历的index,说明在字符串中唯一
public static int getFirstIndex(String s) {
int index = -1;
for (int i = 0; i < s.length(); i++) {
char value = s.charAt(i);
if (s.lastIndexOf(value) == s.indexOf(value)) {
index = i;
break;
}
}
return index;
}