第一个只出现一次的字符
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
输入
"google"
返回值
4
第一时候都会想到暴力解法,全部遍历一遍出现次数。但是复杂度会很高。在自己做了一遍而且思考后,我看完题解其实还不是特别懂,卡在了arr[‘字符’]这块,然后我就去Idea过一遍。然后就是perfect!尽管解不出来,看了题解就没有我琢磨不透的…这就是我女朋友常说我的蜜汁自信吗
方法(巧用HashCode)
if(str == null || str.length() == 0)
return -1;
int[] ints = new int[123];
for(int i = 0;i<str.length();i++){
// 这里很重要ints[字符]的写法,很巧妙地利用了字符会自动转换为int(经过hashcode)
// 大家可以试一试ints['g']++这种写法是可以的,g会转成103
ints[str.charAt(i)]++;
}
for (int i = 0; i < str.length(); i++) {
if(ints[str.charAt(i)] == 1)
return i;
}
return -1;
}
测试
String c = "google";
int i = firstNotRepeatingChar(c);
System.out.println(i);
输出
4
最后,a是数字97,b是98,依次下去,z是122,所以数组大小为123就可以。