題目描述
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;
}