在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例 1:
输入:s = "abaccdeff"
输出:'b'
思路:先找出所有字符出现次数,以及最后一次出现的位置,找出其中只出现一次的字符,并更新最前面的那个字符
class Solution {
public:
char firstUniqChar(string s) {
vector<pair<int,int>> charnum(26);
int n=s.length();
//首先记录每个字符出现次数以及最后一次出现的位置
for(int i=0;i<n;++i){
++charnum[s[i]-'a'].first;
charnum[s[i]-'a'].second=i;
}
int time=INT_MAX,ans=-1;
//更新只出现一次的字符的最前位置,并记录
for(int i=0;i<26;++i){
if(charnum[i].first==1){
if(charnum[i].second<time){
time=charnum[i].second;
ans=i;
}
}
}
//判断是否有只出现一次的字符
return ans==-1?' ':'a'+ans;
}
};