public int FirstNotRepeatingChar_m1(String str) {
HashMap<Character,Integer> charCount=new HashMap<>();
for (int i = 0; i < str.length(); i++) {
charCount.put(str.charAt(i),charCount.get(str.charAt(i))==null?1:(charCount.get(str.charAt(i))+1));
}
for (int i = 0; i < str.length(); i++) {
if (charCount.get(str.charAt(i))==1){
return i;
}
}
return -1;
}
说明 1.int默认值就是0,因此在第一个for进行添加统计记录时候我们可以直接++ 2.为啥这里设置初始数组长度位58 1.首先题目说明是字母 2.ascii表里Z到a直接还有6个其他字符,如[ ] ^,因此这里设置的长度是58而不是52可以参见ascll编码对应10进制的值
public int FirstNotRepeatingChar(String str) {
int[] charCount=new int[58];
for (int i = 0; i < str.length(); i++) {
charCount[str.charAt(i)-'A']++;
}
for (int i = 0; i < str.length(); i++) {
if (charCount[str.charAt(i)-'A']==1){
return i;
}
}
return -1;
}