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

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

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

// #include <bits/stdc++.h> 练习使用头文件,这行注释掉
#include <iostream>
#include <string>
#include <vector>
#include <climits>
using namespace std;

int main() {
    string s;
    cin >> s;   
    vector<vector<int>> char_count(26, vector<int>(2, 0));
    // 下标表示字母编号,第一列计入该字母第一次出现的位置,第二列表示该字母出现多少次
    int n = s.length();
    for(int i = 0; i < n; i++){
        if(char_count[s[i] - 'a'][1] == 0){ // 该字母之前没出现过
            char_count[s[i] - 'a'][0] = i;  // 记录出现位置
            char_count[s[i] - 'a'][1] = 1;  // 出现次数写为1
        }else{
            char_count[s[i] - 'a'][1] += 1; // 出现次数+1
        }
    }
    int ret_idx = 127; // 第一个只出现一次的字母的下标,ret_idx + 'a'就是该字母
    int idx = INT_MAX / 2; // 出现位置的下标
    for(int i = 0; i < 26; i++){
        if(char_count[i][1] == 1 && char_count[i][0] < idx){
            ret_idx = i;           // 记录当前字母是什么,最终的字母有ret_idx + 'a'得到
            idx = char_count[i][0];// 记录出现位置,直到更小的出现位置找到再进行更新
        }
    }
    if(ret_idx == 127) {
        cout << -1 << endl;
    }else{
        char ret = ret_idx + 'a'; // 获得该字母
        cout << ret << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
分享
那一天的Java_J...:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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