方法1:暴力搜索方法, 2个循环遍历
方法2: 动态规划,dp[i][j] ,每次要记录一下最长的开始的位置和长度
class Solution {
public:
bool ispaline(string str){
int start=0;
int end=str.size()-1;
while(start<end){
if(str[start]!=str[end]){
return false;
}
start++;
end--;
}
return true;
}
string longset(string &str1,string &str2){
int n=str1.size();
vector<vector<int> > dp(n+1,vector<int>(n+1,0));
int index=0;
int maxlen=0;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(str1[i-1]==str2[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}
if(maxlen<=dp[i][j]){
index=j;
maxlen=dp[i][j];
}
}
}
return str2.substr(index-maxlen,maxlen);
}
string longestPalindrome(string s) {
size_t size=s.size();
string str;
int max=0;
// for(int i=0;i<size-1;i++){
// for(int j=i+1;j<size;j++){
// if(ispaline(s.substr(i,j-i)) && (j-i)>max){
// str=s.substr(i,j-i);
// }
// }
// }
string str1=s,str2=s;
reverse(str2.begin(),str2.end());
return longset(str1,str2);
//return str;
}
};