题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
分析:用一个数组作存放每个字符出现的次数,数组大小就取52(26个大写字母加上26个小写字母)。这里其实也是哈希的思想,可以O(1)的时间复杂度取出各个字符出现的次数。
代码实现:
class Solution {
public int FirstNotRepeatingChar(String str) {
int size = 'z' - 'A' + 1; //用到这么多个位置做标识
byte[] a = new byte[size]; //创建size大小的数组
for(int i=0;i<str.length();i++){
char ch = str.charAt(i); //逐个取出字符
a[ch-'A']++; //字符对应的数组位置加一
}
for(int i=0;i<str.length();i++){
char ch = str.charAt(i);
if(a[ch-'A']==1) //如果数组该位置对应的字符出现了一次
return i;
}
return -1;
}
}
思考:题目还可稍微改一下,求只出现一次的最小字符(unCode值最小),这时候放入数组的代码不变,只需要将取出的时候顺序取就行了,代码如下:
for(int i=0;i<str.length();i++){
if(a[i]==1) //如果数组该位置对应的字符出现了一次
return i;
}