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