Leetcode:最長迴文子串
阿新 • • 發佈:2021-12-17
題目描述:最長迴文子串
給你一個字串 s,找到 s 中最長的迴文子串。
示例 1:
輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。
示例 2:
輸入:s = "cbbd"
輸出:"bb"
示例 3:
輸入:s = "a"
輸出:"a"
示例 4:
輸入:s = "ac"
輸出:"a"
提示:
1 <= s.length <= 1000
s 僅由數字和英文字母(大寫和/或小寫)組成
動態規劃 因為更長的迴文子串必須保證該子串的子串為迴文子串,因此可以使用動態規劃。
class Solution { public: string longestPalindrome(string s) { int left=0,right,max=1; int n=s.size(); bool ans[n][n]; //新建一個判斷陣列,存放以(i,j)為邊界的子串是否為迴文子串的結果 for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ ans[i][j]=false; } ans[i][i]=true; } for(int j=1;j<n;j++){ for(int i=0;i<j;i++){ if(s[i]!=s[j]){ ans[i][j]=false; }else{ //是否依賴該子串包含的子串是否為迴文子串,取決於該子串的長度是否大於4,即j-i+1>4。長度為3時只要邊界相等即為迴文子串 if(j-i>=3){ ans[i][j]=ans[i+1][j-1]; }else{ ans[i][j]=true; } } if(ans[i][j]&&j-i+1>max){ left=i; right=j; max=j-i+1; } } } //切割字串,left為起點,max為長度 return s.substr(left,max); } };