LeetCode 5 最长回文子串

Posted zzw-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 5 最长回文子串相关的知识,希望对你有一定的参考价值。

题目描述链接:https://leetcode-cn.com/problems/longest-palindromic-substring/

解题思路:动态规划问题。

(1)状态标识dp[i][j]=0标识s[i]到s[j]这个子序列不为回文子串,dp[i][j]=1标识其为回文子串

(2)边界,对于长度为1的子串肯定为回文子串即dp[i][i]=1,长度为2的子串dp[i][i+1]= (s[i]==s[i+1])

(3)状态转移方程,dp[i][j]=(s[i]==s[j]&&dp[i+1][j-1])   需要注意我们这里动态规划的顺序应为从子串的长度递增的顺序,即先判断子串长度为1的,然后判断长度为2的,一直到整个长度。

最后返回为回文子串的最长的子串即可。LeetCode代码如下:

class Solution {
public:
    
    string longestPalindrome(string s) {

       int len=s.size();
       int maxium=0;
       int l=0;
       int size=0;
       bool dp[len+1][len+1];
       int j;
       for(int ll=0;ll<len;ll++){
           for(int i=0;i+ll<len;i++){
               j=i+ll;
               if(ll==0){
                   dp[i][j]=1;
               }
               else if(ll==1){
                   dp[i][j]=(s[i]==s[j]);
               }
               else{
                  dp[i][j]=(s[i]==s[j]&&dp[i+1][j-1]);
               }
               
               if(dp[i][j]&&maxium<j-i+1){
                 maxium=max(maxium,j-i+1);
                 l=i;
                 size=ll+1;
                } 
           }
           
       }
      
       return s.substr(l,size);  
    }
};

 

以上是关于LeetCode 5 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-5 最长回文子串(动态规划)

LeetCode 5 最长回文子串

5-102-(LeetCode- 5) 最长回文子串

LeetCode 5. 最长回文子串(中)

LeetCode 5. 最长回文子串(中)

leetcode 5 最长回文子串