力扣 409.最长回文串(c语言)

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.总结 

该题难度较小,注意理解即可,愿与诸君共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值