作者:whisper
链接:https://www.proprogrammar.com/article/885
声明:请尊重原作者的劳动,如需转载请注明出处
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例:
s = "abaccdeff" 返回 "b" s = "" 返回 " "
限制:
0 <= s 的长度 <= 50000
难度:简单;标签:哈希表;编程语言:C++
class Solution {
public:
char firstUniqChar(string s) {
char res = ' ';
if(s.empty())return res;
int cs[128] = {0};
int index[26] = {0};
int seq = 0;
for(int i = 0; i < s.size(); i++){
if(!cs[s.at(i)])index[seq++] = s.at(i);
cs[s.at(i)]++;
}
for(int i = 0; i < seq; i++){
if(cs[index[i]] == 1){
res = index[i];
break;
}
}
return res;
}
};
两个for循环,第一个找出数第一次出现的位置,第一个for判断第一次出现的这个数是不是只出现了一次,如果是的break并return
class Solution {
public:
char firstUniqChar(string s) {
vector<int> used(256, 0);
for(char a : s){
used[a]++;
}
for(char a : s){
if(used[a] == 1)
return a;
}
return ' ';
}
};
差不多,但我的解法中第二个循环的长度为26而不是s.size(),所以应该比下面的好一点
亲爱的读者:有时间可以点赞评论一下
月份 | 原创文章数 |
---|---|
202206 | 4 |
202205 | 2 |
202204 | 1 |
202203 | 11 |
202201 | 2 |
202108 | 7 |
202107 | 3 |
202106 | 16 |
202105 | 10 |
202104 | 16 |
202103 | 56 |
202102 | 14 |
202010 | 3 |
202009 | 3 |
202008 | 7 |
202007 | 7 |
202006 | 10 |
202005 | 11 |
202004 | 22 |
202003 | 52 |
202002 | 44 |
202001 | 83 |
201912 | 52 |
201911 | 29 |
201910 | 41 |
201909 | 99 |
201908 | 35 |
201907 | 73 |
201906 | 121 |
201811 | 1 |
201810 | 2 |
201804 | 1 |
201803 | 1 |
201802 | 1 |
201707 | 1 |
全部评论