题解 | #找出字符串中第一个只出现一次的字符# 哈希表

找出字符串中第一个只出现一次的字符

https://www.nowcoder.com/practice/e896d0f82f1246a3aa7b232ce38029d4

#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main() {
    string s;
    cin >> s;
    int n = s.size();
    map<char, int> se;
    map<char,int> mp;

    for(int i=0; i<n; i++){
        // 统计出现的次数
        if(mp.find(s[i]) == mp.end()){
            mp[s[i]] = 1;
        }else {
            mp[s[i]]++;
        }
        // 统计出现的位置
        if(se.find(s[i]) == se.end()){
            se[s[i]] = i;
        }
    }

    char res;
    int loc = 2000;
    for(auto i:mp){
        if(i.second == 1){
            if(se[i.first] < loc){
                loc = se[i.first];
                res = i.first;
            }
        }
    }
    if(loc == 2000){
        cout << "-1" << endl;
        return 0;
    }

    cout << res << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

这道题的思路主要是基于对出现次数和第一次出现位置的统计,由于没有说字符串中只有字母,所以需要用到哈希表。

最终加上对于第一次出现位置的逻辑判断就好。

全部评论

相关推荐

我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务