第一个只出现一次的字符 - Java

第一个只出现一次的字符

题目描述

在一个字符串(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就可以。

猜你喜欢

转载自blog.csdn.net/weixin_43957211/article/details/114883535