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

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

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

全部评论

相关推荐

10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务