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.
题意:
求一个string的最大回文子串的问题。
解答:
利用动态规划。
如果S[i...j]是一个回文子串的话,那么要是S[i-1]==S[j+1],则S[i-1...j+1]也是一个回文子串。依据这个来寻找最长的回文子串。
代码:
class Solution {
public:
string longestPalindrome(string s) {
int dp[1000][1000]={0};
int start=0, maxLen=1;
// 每个字符自身就是一个回文子串
for(int i=0; i<s.size(); i++)
dp[i][i]=1;
for(int i=0; i<s.size()-1; i++){
if(s[i]==s[i+1]){
dp[i][i+1]=1;
maxLen=2;
start=i;
}
}
int sLen=s.size();
for(int len=3; len<=sLen; len++){
for(int i=0; i<sLen-len+1; i++){
int j=i+len-1;
// 动态规划
if(s[i]==s[j] && dp[i+1][j-1]==1){
dp[i][j]=1;
maxLen=len;
start=i;
}
}
}
return s.substr(start, maxLen);
}
};
根据代码可知,时间复杂度为O(n^2)。
这一题还有一种时间复杂度为O(n)的解法,会更新的~