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

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

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")

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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