方法一:记录每个字符出现次数
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%的用户