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

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

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

字符串个数统计操作,难度不大
#include<iostream>
#include<string>
#include<vector>
#include<unordered_map>
#include <algorithm>
using namespace std;

static bool cmp(const pair<char,int> &p1, const pair<char,int> &p2) {
    return p1.second < p2.second;
}

int main(){
    string s;
    getline(cin, s, '\n');
    unordered_map<char,int> u_map1;
    unordered_map<char,int> u_map2;
    for (int i = 0; i < s.size(); i++) {
        if (u_map1.find(s[i]) != u_map1.end()) {
            u_map1[s[i]]++;
        } else {
            u_map1[s[i]] = 1;
            u_map2[s[i]] = i;
        }
    }
    vector<pair<char,int>> vec;
    for (unordered_map<char,int>::iterator iter = u_map1.begin(); iter != u_map1.end(); iter++) {
        vec.push_back(make_pair(iter->first, iter->second));
    }
    sort(vec.begin(), vec.end(), cmp);
    if(vec[0].second != 1) {
        cout << "-1" << endl;
    } else {
        int k = 0;
        while (vec[k + 1].second == 1) {
            k++;
        }
        if (k == 0) {
            cout << vec[0].first << endl;
        } else {
            vector<pair<char,int>> vec2;
            for(int i = 0; i <= k; i++) {
                int temp = u_map2[vec[i].first];
                vec2.push_back(make_pair(vec[i].first, temp));
            }
            sort(vec2.begin(), vec2.end(), cmp);
            cout << vec2[0].first << endl;
        }
    }
    return 0;
}


全部评论

相关推荐

07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-21 13:38
8月实习会变多吗现在还没找到实习该怎么办...回复的hr好少
码农索隆:3-4月就要开始找,基本上6月份就发offer,7月初已经开始暑期实习了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务