leetcode5. 最長迴文子串(動態規劃)
阿新 • • 發佈:2018-12-29
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。
示例 1:
輸入: "babad"
輸出: "bab"
注意: "aba"也是一個有效答案。
示例 2:
輸入: "cbbd"
輸出: "bb"
解題思路:
採用動態規劃的思想,如果p[i][j]為true,那麼p[i+1][j-1]也為true。
首先需要求出長度為1和長度為2的字串,然後dp。
class Solution { public: string longestPalindrome(string s) { int start=0; int maxl=1; //初始化長度為1和長度為2的字串 int len=s.size(); int p[len][len]={0}; for(int i=0;i<len-1;i++) { p[i][i]=1; if(i<len-1&&s[i]==s[i+1]) { p[i][i+1]=1; maxl=2; start=i; } } //長度為2以上的字串 for(int maxlen=3;maxlen<=len;maxlen++) { for(int i=0;i<=len-maxlen;i++) { int j=i+maxlen-1; if(s[i]==s[j]&&p[i+1][j-1]) { p[i][j]=1; if(j-i+1>maxl) { maxl=j-i+1; start=i; } } } } return s.substr(start,maxl); } };