题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
#include <algorithm> #include <climits> #include <iostream> #include <string> #include <set> #include <vector> using namespace std; int main() { string st; int min_num = INT_MAX; cin >> st; vector<int> lett(26,INT_MAX); int n = st.size(); for(int i=0; i<n; i++){ if(lett[static_cast<int>(st[i]-'a')] == INT_MAX){ lett[static_cast<int>(st[i]-'a')] = 1; }else{ lett[static_cast<int>(st[i]-'a')]++; } } for(int i=0; i<26; i++){ if(min_num > lett[i]){ min_num = lett[i]; } } // cout << min_num << endl; set<char> se; for(int i=0; i<26; i++){ if(lett[i] == min_num){ se.insert(static_cast<char>('a' + i)); } } // cout << "se:"; // for(auto i=se.begin();i!=se.end();i++){ // cout << *i; // } // cout << endl; for(int i=0; i<n; i++){ if(se.find(st[i]) != se.end()){ st.erase(i, 1); // 因为erase函数会直接改变字符串,所以这里要达成 "所有元素依次考虑" , 这里必须对i做出调整 i--; } } cout << st << endl; return 0; } // 64 位输出请用 printf("%lld")
整个逻辑分为:
1,统计字符串中各字符出现的个数。
2,找到出现最少的次数。
3,找到对应的字母。
4,删除对应的字母。