方法一:记录每个字符出现次数

class Solution {
public:
    char firstUniqChar(string s) {
        unordered_map<char,int> hash;
        for(auto c:s)
            hash[c] += 1;
        for(int i = 0;i < s.size();i++)
        {
            if(hash[s[i]] == 1)
                return s[i];
        }
        return ' ';
    }
};

方法二:

class Solution {
public:
    char firstUniqChar(string s) {
        unordered_map<char,int> hash;
        int size = s.size();
        for(int i = 0;i < size;i++){
            if(hash.count(s[i]))
                hash[s[i]] = -1;
            else
                hash[s[i]] = i;
        }
        
        int loc = size - 1;
        for(auto[_,val]:hash){
            if(val != -1 && val < loc)
                loc = val;
        }

        return (s.empty() || hash[s[loc]] == -1) ? ' ':s[loc];
    }
};

更高效的方法三:

class Solution {
public:
    char firstUniqChar(string s) {
        char result = ' ';
            int times[256] = {0};
        for(char ch : s){
            times[ch]++;
        }
        for(char ch : s){
            if(times[ch] == 1){
                result = ch;
                break;
            }
        }
        return result;
    }
};

运行效率:

执行用时:16 ms, 在所有 C++ 提交中击败了97.60%的用户
内存消耗:10.2 MB, 在所有 C++ 提交中击败了97.33%的用户