题解 | #找出字符串中第一个只出现一次的字符#
找出字符串中第一个只出现一次的字符
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")


基恩士成长空间 440人发布