leetcode5 最长回文字符串

xiaoxiao2021-02-28  51

class Solution { public: string longestPalindrome(string s) { if (s.empty()) return ""; if (s.size() == 1) return s; int start = 0, maxLen = 0; string ans = ""; vector<vector<bool> > dp(s.size(), vector<bool>(s.size(), false)); // 要想按照正序返回, 那我们就得从后往前遍历, 保存最靠前的准确的答案         // 低级犯错 i++用的是不管不顾,都是递减了, 还是i++ for (int i = s.size() - 1; i >= 0; i--) { dp[i][i] = true; start = i; maxLen = 1; } for (int i = s.size() - 2; i >= 0; i--) {             // s[i+1] 未进行越界检查 if (s[i] == s[i + 1]) { dp[i][i + 1] = true; start = i; maxLen = 2; } } for (int k = 0; k < s.size(); k++) { for (int j = 0; j <= k; j++) {

                                // k-1未进行越界检查

if (k - j >= 2 && s[j] == s[k] && k > 1 &&  dp[j + 1][k - 1]) { dp[j][k] = true; if (k - j + 1 > maxLen) { start = j; maxLen = k - j + 1; } } } } ans = s.substr(start, maxLen); return ans; } }
转载请注明原文地址: https://www.6miu.com/read-2620997.html

最新回复(0)