问题
思路
这个题也是思路要清晰,没有什么固定的算法。但是做起来要小心。
- 记录每个字母出现次数
- 判断:
- 出现偶数次,累加次数
- 出现奇数次,累加次数-1
- 最后,如果出现过奇数次,可以多加一个字符
代码
class Solution {
public:
int longestPalindrome(string s) {
int sz = s.size();
if(!sz) return 0;
int hash[128];
memset( hash, 0, sizeof(hash) );
for( int i = 0; i < sz; ++i ){
++hash[s[i]];
}
bool flag = false;
int ans = 0;
for( int i = 0; i < 128; ++i ){
if( hash[i] )
{
if( hash[i]%2 )
{
ans += (hash[i] - 1);
flag = true;
}
else
ans += hash[i];
}
}
if( flag ) ++ans;
return ans;
}
};