zoukankan      html  css  js  c++  java
  • 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; // 递归结束后的最长字串就是结果
    }
  • 相关阅读:
    (Eclipse) Selection does not contain main type
    Spring Web Flow 学习笔记(2)-流程的组件
    Spring Web Flow 学习笔记(1)
    快速排序java实现
    二路归并排序
    剪切板
    Java中空白final
    对象引用和对象
    Java复用类
    Experimenrs on Foursquare
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/12508511.html
Copyright © 2011-2022 走看看