给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
int longestPalindrome(string s) {
int a[52] = {0};
for(int i = 0;i < s.size();i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
a[s[i] - 'A']++;
if(s[i] >= 'a' && s[i] <= 'z')
a[s[i]-'a'+26]++;
}
int maxj = 0;
int sum = 0;
for(int i = 0;i < 52;i++)
{
if(a[i] % 2 == 0)
sum += a[i];
else
{
sum += a[i] - 1;
}
}
if(sum < s.size())
sum += 1;
return sum;
}
另一种
int longestPalindrome(string s) {
int map[128] = {0};
int max_length= 0;
int flag = 0;
for(int i = 0;i < s.size();i++)
{
map[s[i]]++;
}
for(int i = 0;i < 128;i++)
{
if(map[i] % 2 == 0)
max_length += map[i];
else
{
max_length += map[i]-1;
flag = 1;
}
}
return max_length+flag;
}