每日一题:最长回文子串

95 阅读1分钟

5. 最长回文子串]

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

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

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

思想

代码实现

let longestPalindrome = function (s) {
    
  //定义dp数组
  let dp = new Array(s.length).fill(false).map(()=>new Array(s.length).fill(false))
          let start = 0, max_len = 1
  for (let i=0;i<s.length;i++) dp[i][i] = true

  for(j=1;j<s.length;j++){
      for(let i= 0;i<j;i++){
          if(s[i]===s[j]){
              if(j-i<3){
                  dp[i][j] = true
              }else{
                  dp[i][j] = dp[i+1][j-1]
              }
            if(dp[i][j]&&j-i+1>max_len){
                start = i
                max_len = j-i+1
            }
          }
      }
  }
  console.log(start,max_len)
  return s.substr(start,max_len)
}