5.最长回文子串

2020-03-17
最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例:
输入: "babad"
输出: "bab" 或 "aba"
输入: "cbbd"
输出: "bb"
题解:
思路1: 动态规划 + 双指针
以某两个下标为基点左右分别对比,如果左右相等那么左基点-1右基点+1 直到左右不等记录下子字符串
 
function longestPalindrome(s) {
  if (s.length < 2) {
    return s;
  }
  let longestS = ''; // 存最长字串
  let fn = function (i, j) { // 递归函数
    let str = s.substring(i, j + 1); // 截取i -> j的子字符串
    longestS = longestS.length > str.length ? longestS : str; // 判断新截取的字串和原来存的哪个长 取长的
    if (i - 1 >= 0 && j + 1 < s.length) { 
      if (s[i - 1] === s[j + 1]) { // 如果往前一位等于往后一位, 继续递归
        fn(i - 1, j + 1);
      }
    }
  }
  for (let i = 0; i < s.length - 1; i++) { // 循环s
    let j = i; // j默认和i相等
    while (s[i] === s[j + 1] && j + 1 < s.length) { // 如果i和j+1位相等则j++ 比如‘cbbd’中的bb
      j++;
    }
    fn(i, j); // 以i,j为基点开始递归
  }
  return longestS; // 递归结束后的最长字串就是结果
}

 

 

posted @ 2020-03-17 08:55  蓝小胖纸  阅读(143)  评论(0编辑  收藏  举报