题目描述:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
题解:
题解一:
(1)遍历字符串,将每个字符和其对应出现的次数填入map中。
(2)遍历map,找到只出现一次的字符和对应的在字符串中的下标。
public int FirstNotRepeatingChar(String str) {
HashMap<Character,Integer> map = new HashMap<> ();
for(int i = 0;i < str.length ();i++){
int n = map.getOrDefault (str.charAt (i),0);
map.put (str.charAt (i),n+1);
}
for(int i = 0;i < str.length ();i++){
if(map.get (str.charAt (i)) == 1){
return i;
}
}
return -1;
}
题解二:
利用字符串的方法 lastIndexOf(i)
,判断字符串中某一字符最后一次出现的位置是否和第一次出现的位置一致,如果一致,可以说该字符只出现一次。
public int FirstNotRepeatingChar(String str) {
for(int i = 0;i < str.length ();i++){
// 第一次出现和最后一次出现在同一个位置,说明只有一个
if(str.indexOf(str.charAt (i)) == str.lastIndexOf (str.charAt (i))){
return i;
}
}
return -1;
}