[LeetCode]5. 最长回文子串

题目


给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"

代码


class Solution {
public:
    string longestPalindrome(string s) {
        int stepEven=0;
        int stepOdd=0;
        int max=0;
        int isOdd=false;
        int pos=0;
        for(int i=0;i<s.length();i++)
        {
            //奇数
            for(int step=0;(i-step>=0)&&(i+step<s.length());step++)
            {
                if(s[i-step]!=s[i+step])
                    break;
                stepOdd=step*2+1;
            }

            if(stepOdd>max)
            {
                max=stepOdd;
                isOdd=true;
                pos=i;
            }
            //偶数
            for(int step=1;(i-step+1>=0)&&(i+step<s.length());step++)
            {
                if(s[i-step+1]!=s[i+step])
                    break;
                stepEven=step*2;
            }
            if(stepEven>max)
            {

                max=stepEven;
                isOdd=false;
                pos=i;
            }

        }
        string result;
        if(isOdd)
        {
            result=s.substr(pos-(max-1)/2,max);

        }
        else
        {
            result=s.substr(pos-max/2+1,max);
        }
        return result;

    }
};

思路


采用中心扩展法,一共要考虑两种情况:第一种就是回文字符串长度为奇数,从最中间的那个字符开始比较的话是比较它左右的字符串,比如"11322",从3开始比较;第二种就是回文字符串长度为偶数,如果是"2112"的话,那么最开始比较的是第一个1;比较完后返回字符串的时候要分别考虑奇偶来切分子串。

作者:lizhenghao126

出处:https://www.cnblogs.com/lizhenghao126/p/11053680.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   李正浩  阅读(64)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题