题目:
解题思路:
先记录每个字符出现的次数;
然后除2在乘2;奇数次则会取最大偶数次;偶数次则不变;
然后判断是否存在奇数次的字符;若存在且结果为偶数个字符,则结果加1
然后将这个字符数组置0(必须置0);
源码:
int longestPalindrome(char * s){
int res = 0;
int count[128] = {0};
for(int i=0;i<strlen(s);i++)
count[s[i]] ++;
for(int i=0;i<strlen(s);i++){
res += count[s[i]] / 2 * 2;
if(count[s[i]] % 2 !=0 && res % 2 == 0)
res ++;
count[s[i]] = 0;
}
return res;
}
踩坑点:
我们希望的情况是每个字符有一个数组,这个数组记录着字符出现的次数
但是在第二次循环中有8个数组,同一字符的数组会重复出现字符个数次;
所以我们在第一次判断并加入结构之后必须要将这个字符所对应重复出现的剩下全部数组置0;