码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 5 最长回文子串

时间:2020-07-30 22:17:25      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:i++   ret   amp   max   bsp   etc   返回   ges   状态   

题目描述链接: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 最长回文子串

标签:i++   ret   amp   max   bsp   etc   返回   ges   状态   

原文地址:https://www.cnblogs.com/zzw-/p/13406062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!