LeetCode(力扣)5 最长回文子串

思路:

        1.如果字符串长度小于2,直接返回原字符串

        2.定义两个变量,一个start储存当前找到的最大回文字符串的起始位置,另一个maxLength记录字符串的长度(终止位置就是start+maxLength)

        3.创建一个helper function,判断左边和右边是否越界,同时最左边的字符是否等于最右边的字符.如果以上3个条件都满足则判断是否需要更新回文字符串最大长度及最大字符串的起始位置.然后将left--,right++,继续判断,直到不满足三个条件之一.

        4.遍历字符串,每个位置调用helper function两遍,第一遍检查i-1,i+1;第二遍检查i,i+1

            为了同时照顾到babad与cabbad这两种情况

      const longestPalindrome = s => {
        if (s.length < 2) return s;
        let start = 0;
        let maxLength = 1;
        function expandAroundCenter(left, right) {
          while (left >= 0 && right < s.length && s[left] === s[right]) {
            if (right - left + 1 > maxLength) {
              maxLength = right - left + 1;
              start = left;
            }
            left--;
            right++;
          }
        }
        for (let i = 0; i < s.length; i++) {
          expandAroundCenter(i - 1, i + 1);
          expandAroundCenter(i, i + 1);
        }
        return s.substr(start, maxLength);
      };
      console.log(longestPalindrome('babad'));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值