class Solution { public: string longestPalindrome(string s) { if (s.empty()) return ""; int sLen = s.size(); if (sLen == 1) return s; int maxLen = 0; int start = 0; string ans = ""; vector<vector<int> > dp(s.size(), vector<int>(s.size(), 0)); for (int i = 0; i < sLen; i++) { dp[i][i] = 1; maxLen = 1; start = 0; } // i最小 i==1 因为是和之前的值进行比较,这一点是必须要保证的,不然会越界 for (int i = sLen - 1; i > 0; i--) { if (s[i-1] == s[i]) { dp[i-1][i] = 1; dp[i][i-1] = 1; maxLen = 2; start = i-1; // 更新以 i-1进行更新 } } // 主要是利用二维数组保持中间的结果, 后面进行的运算以来前面的结果 // 在字符串[j, k]要判断s[j] 是否等于s[k], 以及之前的运算结果dp[j+1, k+1]是不是回文的 // 如果是的话 就进行更新 for (int k = 2; k < sLen; k++) { for (int j = 0; j < k; j++) { if (k - j >= 2 && s[j] == s[k] && dp[j+1][k-1] == 1) { dp[j][k] = 1; if (k-j+1 > maxLen) { maxLen = k-j+1; start = j; } } } } ans = s.substr(start, maxLen); return ans; } };
最长回文子串 leetcode5
猜你喜欢
转载自blog.csdn.net/weixin_36149892/article/details/80223423
今日推荐
周排行