描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
示例1
输入:"google"
返回值:4
第一种解法
循环遍历,借助一个特殊的map,HashMap来记录出现的字符以及出现的次数,最后遍历map,找到第一个出现次数为1的字符即可。然后查询一遍此字符出现的位置即可。代码如下
public int firstFirstNotRepeatingChar(String str) {
Character c = null;
if(null == str || str.length() < 1){
return 0;
}
char[] chars = str.toCharArray();
HashMap<Character, Integer> map = new HashMap<>();
for (char aChar : chars) {
if(map.get(aChar) != null){
map.put(aChar,2);
} else {
map.put(aChar,1);
}
}
for (Character character: map.keySet()){
Integer integer = map.get(character);
if(integer == 1){
c = character;
break;
}
}
if(c == null){
return -1;
}
return str.lastIndexOf(c);
}
第二种解法
由于题目要求的是找到第一个只出现一次的字符,并返回它的位置,那么我们可以在每次遍历的时候,判断当前字符在字符串中是否只出现了一次,判断逻辑即为第一次出现字符的位置和最后一次出现字符的位置是否是同一个,如果是则说明此字符只会出现一次,停止循环,直接返回即可,代码如下
public int secondFirstNotRepeatingChar(String str) {
if(null == str || str.length() < 1){
return 0;
}
char[] chars = str.toCharArray();
for (char aChar : chars) {
if(str.indexOf(aChar) == str.lastIndexOf(aChar)){
return str.indexOf(aChar);
}
}
return -1;
}