zoukankan      html  css  js  c++  java
  • 刷题87—动态规划(四)

    132.最长回文子串

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-palindromic-substring
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    示例 2:

    输入: "cbbd"
    输出: "bb"

    题目分析

    1. 设置二维数组dp[i][j]为字符串s从索引i到索引j是不是字符串;
    2. 当s[i]和s[j]相等时,说明可以继续扩张回文字符串;
    3. 回文字符串的长度一定>=2;
    4. 所以,状态转移方程:dp[i][j] = s[i] == s[j] && (j-i<2 || dp[i+1][j-1]);
    /**
     * @param {string} s
     * @return {string}
     */
    var longestPalindrome = function(s) {
        let n = s.length;
        let res ='';
        let dp = new Array(n).fill(0).map(() => new Array(n).fill(0));
        for(let i=n-1; i>=0; i--){
            for(let j=i; j<n; j++){
                dp[i][j] = s[i] == s[j] && (j-i<2 || dp[i+1][j-1]);
                if(dp[i][j] && j-i+1 > res.length){
                    res = s.substring(i,j+1);
                }
            }
        }
        return res;
    };
    

      

  • 相关阅读:
    设计模式-状态模式
    设计模式-策略模式
    Spring MVC 梳理
    Spring MVC 梳理
    设计模式-总结
    Spring boot 梳理
    Spring boot 梳理
    [DP题]最长上升子序列
    NOIP2013 Day1
    20171025日程
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12791518.html
Copyright © 2011-2022 走看看