题意:
用所给的字符串构造最长的回文串。字符串仅包含大小写字母。
思路:
能最快想到的就是O(n)的遍历,记录各个字母出现的次数。如果一个字母出现偶数次,则完全可用;若一个字母出现奇数次,除去偶数的部分我们只能挑选一个放在中间。
代码实现:
class Solution {
public:
int longestPalindrome(string s) {
int len = s.size();
int num[200];
int res = 0;
bool flag = false;
memset(num,0,sizeof(num));
for( int i = 0; i < len; i++ ){
int tmp = (int)s[i];
num[s[i]]++;
}
for( int i = 0; i < 200; i++ ){
if( num[i] == 0 ){
continue;
}
if( num[i]%2 == 0 ){
res += num[i]/2;
}
else{
flag = true;
res += (num[i]-1)/2;
}
}
if( flag ){
res = res*2+1;
}
else{
res *= 2;
}
return res;
}
};