地址:5. 最长回文子串
状态:阅读题解,书写代码AC
代码:
动态规划:
状态转移方程:
class Solution {public:string longestPalindrome(string s) {if(s.size() <= 1) return s;int len = s.size();string ans;vector<vector<int>> dp(len, vector<int>(len));for(int l = 0;l<len;l++){for(int i = 0;i+l<len;i++){int j = i+l;if(l == 0) dp[i][j] = 1;else if(l == 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] && (l+1>ans.size())){ans = s.substr(i,l+1);}}}return ans;}};
中心扩散:
class Solution {public:string longestPalindrome(string s) {if (s == "")return "";int len = s.length();int index = 0,maxL=0,begin=0;while (index < len) {int right = index, left = index;while (index < len&&s[index + 1] == s[index]) {index++;right++;}while (right < len&&left >= 0 && s[right] == s[left]) {right++;left--;}right--, left++;if (right-left+ 1 > maxL) {maxL = right - left + 1;begin = left;}index++;}return s.substr(begin, maxL);}};
