1.题目描述
2.思路讲解
1.啥是回文串?
就是正过来念和反过来念都相同,例如“abcdcba”和“abba”
2.怎么解决这个问题呢?
我们不需要去想太多,你看我们要想整个回文字符串,至少一个字母得出现两次吧(最基础),然后如果有个孤单的字符,插进去就完事了,但注意我们只能带一个孤独的字符玩,这个不难理解,你要是让两个孤独的字符进入了我们的回文串,那不就gg了吗。
3.怎么统计一个英文字母出现了多少次呢?
哈希表!!!只要出现一次我们就++,这样最后就能知道谁出现几次了,再去判断是奇数还是偶数。如果是偶数就直接加,奇数就得减一了
3.最终实现
int longestPalindrome(char * s){
int hash[52];//哈希表
int maxlong=0;//最长回文串长度
int oldmask=0;//标志
memset(hash,0,sizeof(hash));//得全变成0啊!!!
for(int i=0;i<strlen(s);i++)
{
if(s[i]>='a'&&s[i]<='z')//小写字母
{
hash[s[i]-'a']++;
}
else//大写字母
{
hash[s[i]-'A'+26]++;
}
}
for(int i=0;i<52;i++)
{
maxlong+=hash[i];
if(hash[i]%2)//说明为奇数
{
maxlong--;//此时maxlong要减一
oldmask=1;//由奇数我们就得给标志了
}
}
if(oldmask==1)//说明肯定有孤独的字符
{
maxlong+=1;//最后带一个孤独的字符玩
}
return maxlong;
}
4.结果展示
5.总结
该题难度较小,注意理解即可,愿与诸君共同进步