https://oj.leetcode.com/problems/longest-palindromic-substring/
给一个string,求它的最长回文子串。
定义一个二维数组bool isPal[1000][1000];记录从 i 到 j 是否为回文的。
首先初始化 [i][i] = true;
[i][i+1] = (s[i] == s[i+1])
之后对长度 len = 3 和 开始位置 i 进行遍历,复杂度 n*n : sPal[i][i+len-1] = (isPal[i+1][i+len-2] && (s[i] == s[i+len-1])); 判断首尾是否相等,并且中间的部分是否为 true。
class Solution { public: string longestPalindrome(string s) { if(s == "") return ""; bool isPal[1000][1000]; for(int i = 0;i < s.size(); i++) isPal[i][i] = true; int begin = 0, maxlen = 1; for(int len = 2;len <= s.size(); len++) { for(int i = 0; i + len <= s.size(); i++) { if(len == 2) { isPal[i][i+1] = (s[i] == s[i+1]); if(isPal[i][i+1]) { begin = i; maxlen = len; } } else { isPal[i][i+len-1] = (isPal[i+1][i+len-2] && (s[i] == s[i+len-1])); if(isPal[i][i+len-1]) { begin = i; maxlen = len; } } } } return s.substr(begin,maxlen); } };