题目描述
给定一个包含大写字母和小写字母的字符串 s,返回通过这些字母构造成的最长回文串的长度。
注意:区分大小写,
'A'和'a'视为两个不同字符;不需要用完所有字符。
核心思想:回文串中,字符成对分布;最多只能有一个字符放在中间作为对称轴。
cpp
class Solution {
public:
int longestPalindrome(string s) {
int tmp[128]={0};
int ret=0;
int n=0;
for(auto e:s)
{
tmp[e-'A']++;
}
for(auto e:tmp)
{
if(e%2!=0)
n++;
ret+=e/2*2;
}
if(n>0)
return ret+1;
return ret;
}
};