一、题目描述
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例1:
输入:s="abaccdeff"
输出:'b'
示例2:
输入:s=""
输出:' '
限制:
0<=s的长度<=50000
二、思路分析
注:思路分析中的一些内容和图片参考自力扣各位前辈的题解,感谢他们的无私奉献
思路
创建一个长度为26的数组,存放各个字符出现的次数。然后对字符串进行遍历,去查询每个字符出现的次数,碰到第一个次数为1的就是需要输出的结果。如果没有出现次数为1的字符,则输出’ '。
算法流程:
①创建一个长度为26的数组
cnt
,并将每个元素设置为0。
②对字符串s
进行第一次遍历,将各个字符出现的次数记录在cnt
对应的位置上。
③对字符串s
进行第二次遍历,去cnt查找对应字符出现的次数。如果是1,则直接返回这个字符。
④如果一直没有字符出现次数大于1,则返回’ '。
三、整体代码
整体代码如下
char firstUniqChar(char* s){
int cnt[26];
memset(cnt, 0, sizeof(int)*26);
int i = 0;
while(s[i] != '\0'){
cnt[s[i]-'a']++;
i++;
}
i = 0;
while(s[i] != '\0'){
if(cnt[s[i]-'a']==1) return s[i];
i++;
}
return ' ';
}
运行,测试通过