五、最长回文子串

最长回文子串(力扣第五题)

题目描述

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

示例1
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例2
输入:s = "cbbd"
输出:"bb"
思路
  • 整体思路是遍历字符串中的每一位,对每一位的左右两面比较看看是否符合回文子串的条件

  • 首先对传入的字符串长度进行判断,小于2的话,也就是说只有一个字符或者为空,他们本身就是这个

  • 定义两个变量start(用来记录回文子串的起点,方便最后截取出来),另一个是maxLength,记录子串的长度(终止位置是start+maxLength

  • 接下来创建一个方法,在for循环遍历字符串的时候不断用这个方法判断是否符合回文子串,以及符合回文子串的起点start以及长度maxLength

    • 在这个方法中首先判断左右是否越界,以及左右两边是否相等,都满足的情况下比较maxLength和这个子串的长度,重新判断maxLength(方法中会传入leftright两个参数来判断比较),如果不满足条件左left--并且right++,继续判断,直到不满足条件跳出while循环
  • for循环便利的时候需要调用自己写的函数两边,第一遍检查i-1,i+1(用来解决字符串是奇数的情况),第二遍检查ii+1(用来解决字符串是偶数的情况)

代码
var longestPalindrome = function(s) {
    if(s.length <= 1){
        return s
    }
    var start = 0;
    var maxLength = 1;
    var fn = function(left , right){
        while (left >= 0 && right < s.length && s[left] == s [right]){
            var newLength = right - left +1
            if(newLength > maxLength){
                start = left
                maxLength = newLength
            }
             right++;
             left--
            
        }
    }
    for(let i = 0 ; i < s.length ; i++){
        fn(i,i+1)
        fn(i-1, i+1)
    }
    return s.substring(start,start + maxLength)
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值