给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。
class Solution {
public:
int longestPalindrome(string s) {
int res=0;
map<char,int> m;
for( int i = 0 ; i< s.size(); i++)
{
if(m.count(s[i])==1)
{
m[s[i]]++;
}
else
m[s[i]] = 1;
}
int flag=0;
for(map<char,int>::iterator it = m.begin() ; it!=m.end();it++)
{
if(it->second % 2==0)
res+=it->second;
else if(it->second%2!=0&&flag==0)
{
res+=it->second;
flag=1;
}
else if(it->second%2!=0&&flag==1)
{
res+=it->second-1;
}
}
return res;
}
};
思路:
map记录次数,然后判断次数的奇偶性,偶数直接加,奇数第一次遇到时直接加,再遇到+(次数-1)。