给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
public class Solution {
public static void main(String[] args) {
Solution solution=new Solution();
int s=solution.firstUniqChar("hellohey");
System.out.println(s);
}
public int firstUniqChar(String s) {
// //解法1: 暴力搜索, T:O(n^2)
// for (int i=0;i<s.length();i++){
// boolean isunique=true;
// for (int j=0;j<s.length();j++){
// if (j!=i&&s.charAt(i)==s.charAt(j)){
// isunique=false;
// break;
// }
// }
// if (isunique)
// return i;
// }
// return -1;
//解法2: HashMap,第一次遍历每一个字符,统计每种字符出现的次数。第二次遍历,找到第一出现的字符次数为1的字符。
Map<Character,Integer> map=new HashMap<>(s.length());
for (int i=0;i<s.length();i++){
if (!map.containsKey(s.charAt(i))){
map.put(s.charAt(i),1);
}else {
map.put(s.charAt(i),map.get(s.charAt(i))+1);
}
}
for (int i=0;i<s.length();i++){
if (map.get(s.charAt(i))==1){
return i;
}
}
return -1;
}
}