牛客网&&华为机试&&删除字符串中出现次数最少的字符
代码实现
#include<iostream>
#include<string>
#include<vector>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::vector;
int main()
{
string str;
int temp = 0;
int min = 0;
int len = 0;
while (getline(cin,str))
{
vector<int> vec(26, 0); //初始化,对应26个字母,必须放在内部!!!
len = str.size();
for (int i = 0; i < len; i++)
{
temp = str[i] - 'a';
vec[temp] = vec[temp] + 1; //表示字母对应的数组加1
}
//得出出现最少次数的字符
min = vec[str[0] - 'a'];
for (int i = 0; i < len; i++)
{
//if (vec[i] <= min){min = vec[i];} //!!!错误
if (vec[str[i] - 'a'] <= min) //!!!查找在字符串中对应字符出现的次数
min = vec[str[i] - 'a']; //字符出现最少的次数
}
//打印字符
for (int i = 0; i < len; i++)
{
if (vec[str[i] - 'a'] > min)
cout << str[i];
}
cout << endl;
}
return 0;
}
编程笔记
- 代码实现解题思路:1.创建一个长度为26的数组存放对应的a到z的字母;2.当出现字母a的时候,数组vec[0]的数值加1,循环操作字符串中所有的字母;3.获取字符出现最少的次数,数组vec[i]里面的数值即代表相应字符出现的次数,注意:需要查找在字符串中对应字符出现的次数;4.将多于最少次数的字母依次打印。
- 此种解题方式需要好好掌握。