卡码网不同的字符串
#include<vector>
#include<string>
#include<iostream>
using namespace std;
int main()
{int n=0;cin>>n;for(int i=0;i<n;i++){string s;cin>>s;vector<int>hash(26,0);for(int j = 0;j < s.size();j++)hash[s[j]-'a']++;//找需要删除成对字母的字母int res1 = 0;//代表删了多少对,也就是有res1个字母需要新增到字符串末尾for(int k = 0;k < 26;k++){if(hash[k] > 1){int temp = hash[k] / 2;hash[k] -= 2 * temp;res1 += temp;}}//找没有字母的字母空位,用于放新增的字母int res2 = 0;for(int k = 0;k < 26;k++){if(hash[k] == 0)res2++;}//如果空位大于要新增的字母数,那么操作数就是删除成对字母的数res1//否则,新加的字母又会产生res1-res2的重复位,还需要再删res1-res2次if(res1 > res2)res1 += res1 - res2;cout << res1 << endl;}}