题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
示例1
输入abcdd
输出dd
分析:分三个步骤解决问题:
1).找到字符串中出现的每个字符的个数;
2).找到出现的字符最少个数;
3).去掉原字符串中的出现最少的字符;
程序:
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
while (getline(cin, s)){
int a[26] = { 0 }, i = 0,k=0;
while (i < s.size()) { //保存字符的个数;
a[s[i] - 'a']++;
i++;
}
for (int j = 0; j < 26; j++){ //找到字符最少的个数;
if (k == 0) k =a[j]>k?a[j]:k; //本可用k=max(k,a[j])的,但编译器不能识别#include<windows.h>
else if(a[j]!=0) k =a[j]<k?a[j]:k;
}
i = 0;
while (i < s.size()) { //去掉出现次数最少的字符;
if (a[s[i] - 'a'] == k) s.erase(s.begin()+i);
else i++;
}
cout << s << endl;
}
return 0;
}