题目描述
LZY最近迷上了字符串专题,他现在想到了一个问题,他用计算机模拟了一串字符串,他想知道他模拟随机出来的字符串中的字符能组成的最长回文串的长度是多少?你能帮助LZY解决这个问题吗?
LZY比较腹黑,模拟的字符串中包含大小写字母,请注意区分大小写。比如 “Zz” 不能当做一个回文字符串。
输入
测试样例由多组测试数据组成,每组测试数据第一行输入一个字符串s ( 1 <= s.length <= 10000 )
输出
输出这个随机字符串中的字符能组成的最大回文串的长度
样例输入 Copy
abccccdd
样例输出 Copy
7
解题思路
统计字符串中每个字符出现的次数,从每个字符中挑出2n(2n<=字符的个数),如果还有多余的字符就还可以随意挑出一个组成字符串。
#include<bits/stdc++.h>
using namespace std;
vector<char>q;
map<char,int>mp;
int main(){
ios::sync_with_stdio(false);
char str[10005];
int len,i,sum;
while(cin>>str){
q.clear();
mp.clear();
len=strlen(str);
for(i=0;i<len;i++){
if(!mp[str[i]])
q.push_back(str[i]);
mp[str[i]]++;
}
len=q.size();
sum=0;
for(i=0;i<len;i++){
sum+=mp[q[i]]/2*2;
mp[q[i]]=mp[q[i]]%2;
}
for(i=0;i<len;i++){
if(mp[q[i]]!=0){
sum++;
break;
}
}
cout<<sum<<endl;
}
return 0;
}