#include<bits/stdc++.h>
using namespace std;
int main(){
int i,f=0,sum=0;
int map[52];
char a[1015];
memset(map,0,sizeof(map));
scanf("%s",a);
for(i=0;i<strlen(a);i++){
if(islower(a[i])){
map[int(a[i]-'a')]++;
}
else{
map[int(a[i]-'A')+26]++;
}
}
for(i=0;i<52;i++){
if(map[i]%2==0){
sum+=map[i];
}
else{
f=1;
sum+=map[i]-1;
}
}
if(f==0)
printf("%d\n",sum);
else
printf("%d\n",sum+1);
}
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
abccccdd
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
分析:由题意可知,根据字符数量的奇偶判断长度,偶数都算, 奇数的话有两种,一个奇数就将他放在中间就成了最长回文。多个奇数就将数量-1加上,最后在答案上+1即可。
对于字符的存入,用一个数组即可