题目:
给你一个字符串 s,找到 s 中最长的回文子串。
大神解析:
原文
解法一:
class Solution {
public:
bool isvalid(string str,int low,int high){
auto i=low,j=high;
while(i<j){
if(str[i]!=str[j]){
break;
}
++i;
--j;
}
if(i>=j){
return true;
}else{
return false;
}
}
string longestPalindrome(string s) {
if(s.length()<2){
return s;
}
int maxlength=1;
string sub=s.substr(0,1);
for(int i=0;i<s.length()-1;i++){
for(int j=i+1;j<s.length();j++){
bool id=isvalid(s,i,j);
if(id==true && (j-i+1)>maxlength){
maxlength=j-i+1;
sub=s.substr(i,maxlength);
}
}
}
return sub;
}
};
解法二:(动态规划)
class Solution {
public:
string longestPalindrome(string s) {
int n=s.length();
vector<vector<int>> dp(n,vector<int>(n,0));
int maxlength=1,start=0;
for(int j=1;j<n;j++){
for(int i=0;i<j;i++){
if(s[i]==s[j]){
if(j-i<3||dp[i+1][j-1]==1){
dp[i][j]=1;
if(j-i+1>maxlength){
maxlength=j-i+1;
start=i;
}
}
}
}
}
string sub=s.substr(start,maxlength);
return sub;
}
};
转载动态规划解析:
https://blog.csdn.net/ailaojie/article/details/83014821