通知
关于网站更多信息请加whimurmur模板/jpress插件QQ群(1061691290)            网站从因情语写改为晴雨            这个网站的模板也从calmlog_ex改为 whimurmur

leetcode 剑指 Offer 50. 第一个只出现一次的字符

201人浏览 / 0人评论 / | 作者:whisper  | 分类: 剑指offer2  | 标签: 剑指offer2  | 

作者:whisper

链接:https://www.proprogrammar.com/article/885

声明:请尊重原作者的劳动,如需转载请注明出处


剑指 Offer 50. 第一个只出现一次的字符

在字符串 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(),所以应该比下面的好一点


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!
广告位-帮帮忙点下广告