方法1,利用字符的hash特性实现随机读取
代码语言:javascript复制 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;
}
方法2,利用利用每个字母的ASCII码的特殊性做存储,然后随机读取
说明 1.int默认值就是0,因此在第一个for进行添加统计记录时候我们可以直接 2.为啥这里设置初始数组长度位58 1.首先题目说明是字母 2.ascii表里Z到a直接还有6个其他字符,如[ ] ^,因此这里设置的长度是58而不是52可以参见ascll编码对应10进制的值
代码语言:javascript复制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;
}