思路
字符串s
只包含小写字母,key的范围很小,因此可以用数组模拟一个哈希表。可能出现的字符只有26个,数组大小就设置为26。用cr[0]
记录字符a
出现的次数,按照字母顺序表依此类推。
第一次遍历字符串s
,统计完成cr[26]
数组的值,字符每出现一次,相应的数组元素就加一。
第二次遍历字符串s
,直接判断当前字符出现的次数是否为1,第一次出现的字符直接使用return
语句返回。
关键词:数组
细节
- 初始化数组
直接使用int cr[26]={ };
,初始化数组元素全为0.
如果不初始化数组,就会被随机赋值,程序结果会出错。 - 没有字符
字符串s
为空串的时候,直接返回单空格。调用s.length()
得到s的长度。使用的是C++
语言,length
后面忘记跟括号,程序报错。 - 小写字母的
ASCII
码
小写字母a
的ASCII
码为97. - 没有只出现一次的字符
返回单空格。 - for语句遍历字符串
每个元素都为char
类型。
实现
自写
class Solution {
public:
char firstUniqChar(string s) {
int cr[26]={ };
if(s.length()==0) return ' ';
for(char x:s){
int t=x-97;
cr[t]++;
}
for(char x:s){
int t=x-97;
if(cr[t]==1) return x;
}
return ' ';
}
};