描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
示例1
输入:"google"
返回值:4
hashMap 思路
- 创建一个hashmap,然后遍历整个字符串一遍,记录下每个字符出现的次数
- 再次遍历整个字符串,根据我们前面存储的hashmap找哪个字符只出现过一次,直接返回他的位置
这里有个重点是,题目里说,字符需要区分大小写,因为我们这里是直接存储的字符,所以我们并没有改变他的大小写,所以不用进行额外的操作。但是如果题目产生变形,不需要区分大小写,我们可以在存储时把所有的字符都变成大写或者小写,放进hashmap的keyset里,然后找的时候也进行相应的变形,就可以了。
import java.util.*;
public class JZ34 {
public int FirstNotRepeatingChar(String str) {
if(str.length()==0||str==null) return -1;
HashMap<Character,Integer> map=new HashMap<>();
for (int i = 0; i < str.length(); i++) {
if(!map.keySet().contains(str.charAt(i)))
map.put(str.charAt(i),1);
else
map.put(str.charAt(i),map.get(str.charAt(i))+1);
}
for (int i = 0; i < str.length(); i++) {
if (map.get(str.charAt(i))==1)
return i;
}
return -1;
}
}