刷题升级之路:Leetcode——5.最长回文子串

题目描述

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

示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。

示例 2:
输入:s = “cbbd”
输出:“bb”

提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成

来源:力扣(LeetCode)

算法思路和分析

要找最长回文子串,我的想法是按长度从长到短进行循环枚举,找到回文子串即输出。
找回文子串的方法是,在确定的长度下,枚举起始位置(即得到结尾位置),双指针法从头和尾向中间集中,验证回文性是否满足。
算法时间复杂度,最坏情况下为O(n*len)(简单地考虑为每次的最坏情况的累积,理论上是否可能出现没有仔细验证,即可能不是紧的上界)

代码实现

class Solution {
public:
    string longestPalindrome(string s) {
        int len = s.length();
        for(int i=len;i>0;i--){
            for(int j=0;j<=len-i;j++){
                int start = j;
                int end = j+i-1;
                while(start<end){
                    if(s[start]==s[end])
                        start++,end--;
                    else
                        break;
                }
                if(start>=end)
                    return s.substr(j,i);
            }
        }
        return s.substr(0);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值