第一个只出现一次的字母
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
分析
-
使用HashMap实现
-
全部字母即a-z 和 A-Z。在ASCII码中,A-Z对应的为65-90,a-z对应的ASCII码值为97-122。总共有 26+26 = 52个字母,但ASCII码中的91-96不是字母。如果需要构建一个 52+6 = 58长度的数组,下标代表不同字母,计算时将当前字母 -65即为下标值。
实现
public int FirstNotRepeatingChar(String str) {
int[] hash = new int[58];
for(int i = 0;i<str.length();i++){
hash[((int)str.charAt(i))-65] += 1;
}
for(int i=0;i<str.length();i++){
if(hash[((int)str.charAt(i))-65]==1)
return i;
}
return -1;
}