首页 > 代码库 > leetcode 5.Longest Palindromic Substring

leetcode 5.Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

求最长回文子串,假设我们已知S[i...j]是回文子串,那么,若S[i-1] = S[j+1],则S[i-1,...,j+1]是回文子串。

用table[i][j]的true/false表示S[i,...,j]是否为回文子串,

可以得到递推公式:table[i][j] = table[i+1][j-1] && (S[i] == S[j]) (i+1 <= j-1, 即 i+2 <= j)

初始条件:

当j = i 时,table[i][j] = true;

当j = i + 1时,table[i][j] = (S[i] == S[j])

 1 string longestPalindrome(string s)  2     { 3         bool table[1000][1000] = {false}; 4         int i, j, slen = s.length(), start = 0, maxlen = 1; 5          6         for (i = 0; i < slen; i++) 7             table[i][i] = true; 8         for (i = 0; i < slen - 1; i++) 9         {10             j = i + 1;11             if (s[i] == s[j])12             {13                 table[i][j] = true;14                 start = i;15                 maxlen = 2;16             }17         }18         19         for (int len = 3; len <= slen; len++)20         {21             for (i = 0; i < slen - len + 1; i++)22             {23                 j = i + len - 1;24                 if (s[i] == s[j] && table[i + 1][j - 1])25                 {26                     table[i][j] = true;27                     start = i;28                     maxlen = len;29                 }30             }31         }32         33         return s.substr(start, maxlen);34     }

 

leetcode 5.Longest Palindromic Substring