leetcode 最长回文子串 中等

方法一:马拉车算法。https://www.cnblogs.com/rookie-acmer/p/15188550.html
方法二:dp,dp[i][j] 表示 [i, j] 是否为回文字符串。dp[i][j] = dp[i + 1][j - 1] && (s[i] == s[j])。。
需要注意枚举方式,枚举回文串的长度,然后枚举串的起点!而不是直接枚举串的起点和终点
class Solution { public: string longestPalindrome(string s) { memset(dp, 0, sizeof(dp)); int maxLen = -1, begIdx; for(int len = 0; len < s.size(); ++ len) { for(int i = 0; i < s.size() - len; ++ i) { int j = i + len; if(len == 0) dp[i][j] = true; else if(len == 1) dp[i][j] = s[i] == s[j]; else { dp[i][j] = dp[i + 1][j - 1] & (s[i] == s[j]); } if(dp[i][j] && maxLen < len) { maxLen = len; begIdx = i; } } } return s.substr(begIdx, maxLen + 1); } static const int maxn = 1e3 + 10; bool dp[maxn][maxn]; };

浙公网安备 33010602011771号