给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
/*
思路:dp[i][j]={
true; i=j
dp[i-1][j+1]&&s[i]==s[j]; j-i>1
s[i]==s[j]; j-i=1
}
*/
class Solution {
public:
string longestPalindrome(string s) {
bool dp[1010][1010];
int l=0,r=0,maxn=0;
for(int i=0;i<s.length();i++) dp[i][i]=true;
for(int j=1;j<s.length();j++){
for(int i=0;i<=j;i++){
if(i==j) dp[i][j]=true;
else if(j-i==1) dp[i][j]=(s[i]==s[j]);
else{
dp[i][j]=dp[i+1][j-1]&&(s[i]==s[j]);
}
if(dp[i][j] && j-i>maxn){
l=i;
r=j;
maxn=j-i;
}
}
}
char x[1010];
memset(x,0,sizeof x);
int cnt=0;
for(int i=l;i<=r;i++){
x[cnt++]=s[i];
}
return x;
}
};