给定一个包含大写字母和小写字母的字符串 s
,返回 通过这些字母构造成的 最长的
回文串
的长度。
在构造过程中,请注意 区分大小写 。比如 "Aa"
不能当做一个回文字符串。
思路:
碰到偶数个相同字母,则全放进去,碰到奇数个相同字母,则减一放进去。
最后看中心位置,若原本有奇数个的字母,则中间位置可以单独放一个字母。
class Solution {
public:
int longestPalindrome(string s) {
//奇数个的留一个,偶数个全要
vector<int>al(26,0);
vector<int>alup(26,0);
for(auto e:s)
{
if(e>='a'&&e<='z')
{
al[e-'a']++;
}
else
{
alup[e-'A']++;
}
}
int ret=0;
int flag=0;
for(auto e:al)
{
ret+=(e/2)*2;
if(e%2==1)
flag=1;
}
for(auto e:alup)
{
ret+=(e/2)*2;
if(e%2==1)
flag=1;
}
return ret+flag;
}
};