leetcode--面试题50. 第一个只出现一次的字符

面试题50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。

示例:

s = “abaccdeff”
返回 “b”

s = “”
返回 " "

限制:

0 <= s 的长度 <= 50000

思路一:哈希表法

class Solution {
public:
    char firstUniqChar(string s) {
        char ans = ' ';
        int len = s.length();
        unordered_map<char, int> map;
        for (int i=0; i<len; i++){
            map[s[i]]++;
        }
        for (int i=0; i<len; i++){
            if (map[s[i]] == 1){
                ans = s[i];
                break;
            }
        }
        return ans;
    }
};
/*64ms,13.4MB*/

思路二:字母数组法

class Solution {
public:
    char firstUniqChar(string s) {
        char ans = ' ';
        int len = s.length();
        vector<int> c(26);
        for (int i=0; i<len; i++){
            c[s[i]-'a']++;
        }
        for (int i=0; i<len; i++){
            if (c[s[i]-'a'] == 1){
                ans = s[i];
                break;
            }
        }
        return ans;
    }
};
/*24ms,13.1MB*/

思路三:bitset法

class Solution {
public:
    char firstUniqChar(string s) {
        char ans = ' ';
        int len = s.length();
        bitset<128> bs1, bs2;
        for (int i=0; i<len; i++){
            if (!bs1[s[i]] && !bs2[s[i]]){
                bs1[s[i]] = 1;
            }else if (bs1[s[i]] && !bs2[s[i]]){
                bs2[s[i]] = 1;
            }    
        }
        for (int i=0; i<len; i++){
            if (bs1[s[i]] && !bs2[s[i]]){
                ans = s[i];
                break;
            }
        }
        return ans;
    }
};
/*40ms,13MB*/

参考链接:
https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/bisetshi-yong-by-yl-precious/

你可能感兴趣的:(字符串,leecode)