Every day a leetcode
题目来源:409. 最长回文串
解法1:hash
先用hash表记录字符串 s 中各字符出现的次数。
对于每种字符:
- 若它字符出现的次数为偶数,则可以全部用来组成回文串;
- 若为奇数,则去掉一个,其余可以用来组成回文串。
最后还需要特判:若最后的回文串长度 < s的长度,则可以从剩下的字符中随便拿一个放在回文串的中心,新的字符串也是回文串。
代码:
#define MAX_HASH_LENGTH 128
int longestPalindrome(char * s){
int hash[MAX_HASH_LENGTH];
memset(hash,0,sizeof(hash));
int ans=0;
for(int i=0;i<strlen(s);i++) hash[s[i]]++;
for(int i=0;i<MAX_HASH_LENGTH;i++)
{
if(hash[i]%2 == 0) ans+=hash[i];
else ans+=hash[i]-1;
}
if(ans!=strlen(s)) ans++;
return ans;
}
结果: