動態規劃 -- 最長迴文子串
阿新 • • 發佈:2022-05-30
5.最長迴文子串
給你一個字串 s,找到 s 中最長的迴文子串。
示例 1:
輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。
class Solution { public: string longestPalindrome(string s) { int len = s.length()-1; int dp[len+5][len+5]; int maxLenth = 1; memset(dp,0,sizeof(dp)); int leftSide = 0 ; for(int i = 0 ;i <= len;i++) dp[i][i] = 1; for(int L = 2 ;L <= len+1 ;L++){ // 列舉字串的長度 for(int i = 0 ;i<= len ;i++){ // 列舉字串左邊界 int j = i + L -1; // 列舉字串右邊界 if(j > len) break; if(s[i] == s[j]){ if(j - i < 3 || dp[i+1][j-1]){// 如果字串的長度為 2 或 3 或者 子串的字串是迴文 if(L > maxLenth){ maxLenth = L; leftSide = i; rightSide = j; } dp[i][j] =1; } } } } return s.substr(leftSide,maxLenth); } };
說明
迴文字串是天生具有遞推關係的一類字串,判定一個字串是否是迴文字串,只需要判定其去掉兩端字元之後是否是一個迴文字串