5. 最長迴文子串 dp
阿新 • • 發佈:2021-12-21
給你一個字串 s,找到 s 中最長的迴文子串。
class Solution { public: string longestPalindrome(string s) { int n = s.size(); if (n < 2) { return s; } int maxlen = 1; string ans = ""; ans += s[0]; int l, r; vector <vector<bool>> dp(n, vector<bool> (n, false)); for (int i = 0; i < n; i++) { dp[i][i] = true; } // 列舉字串長度 for (int len = 2; len <= n; len++) { // 列舉左邊界 for (l = 0; l < n; l++) { // 確定右邊界 r = l + len - 1; if (r >= n) { break; } if (s[l] == s[r]) { if (len == 2) { dp[l][r] = true; } else { dp[l][r] = dp[l + 1][r - 1]; } } else { dp[l][r] = false; } if (dp[l][r] && r - l + 1 > maxlen) { maxlen = r - l + 1; ans = s.substr(l, maxlen); } } } return ans; } };