标签: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); } };
标签:i++ ret amp max bsp etc 返回 ges 状态
原文地址:https://www.cnblogs.com/zzw-/p/13406062.html