LeetCode 最长回文子串

这篇文章详细讲解了如何使用C语言暴力解法解决LeetCode上的最长回文子串问题,通过遍历字符串并动态调整最长回文串的长度,提供了一段实用的代码示例和理解过程。

leetcode

给你一个字符串 s,找到 s 中最长的回文子串。

C语言

暴力解法

遍历数组,固定住左端,然后从最右端往前找与固定住的字符相同的,再判断是否是回文串,不是的话继续往前找,一直找到固定住的那个字符,如果是回文子串,记录下长度以及固定住的那个字符的下标,然后跳出循环,进行下一个字符的循环。

char * longestPalindrome(char * s)
{
    int left = 0,right = strlen(s);
    int maxSize = 1;
    int t = 0;
    int start = 0;
    if(right <= 1 )
    return s;
    for(left = 0;s[left]!='\0';left++)//从最左边开始遍历
    {
        t = 0;//判断是否有最大值替换;
        if(right - left + 1 <= maxSize)
        {
            break;//如果数组剩余字符数量少于maxSize,直接跳出循环;
        }
        for(right = right-1;right>left;right--)//右边往前遍历数组;
        {
            if(s[left]==s[right])
            {
                for(int i = left,j = right;i <= j;i++,j--)
                {
                    if(i == j||(i==j-1&&s[i]==s[j]))
                    {
                        if(maxSize<(right-left+1))
                        {
                            maxSize = right - left + 1;
                            start = left;
                            t = 1;//maxSize修改值之后退出此外层循环;
                        }
                    }
                    if(s[i]!=s[j])//判断是否是回文串
                    {
                       break;
                    }
                }    
            }
            if(t==1)
            {
                break;
            }
        }
        right = strlen(s);
    }
    s[start + maxSize] = '\0';
    return s+start;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值