思路1:暴力,但是过不了全部数据,只能过1/3左右,时间复杂度高
class Solution {
public:
bool judge(string s){
int len=s.length();
for(int i=0;i<len/2;i++){
if(s[i]!=s[len-i-1])
return false;
}
return true;
}
string longestPalindrome(string s) {
int num=0;
string ans;
for(int i=0;i<s.length();i++){
for(int j=i+1;j<=s.length();j++){
string t=s.substr(i,j-i+1);
if(judge(t)&&t.length()>num){
num=t.length();
ans=t;
}
}
}
return ans;
}
};
注意:substr的使用:
思路2:DP
class Solution {
public:
string longestPalindrome(string s) {
int a[1005][1005]={0};
int len=s.length();
string ss;
ss=s;
reverse(ss.begin(),ss.end());
int num=0;int ans=0;//ans表示最长字符串最后一位
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
if(s[i]==ss[j]){
if(i==0||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+1;
}
if(a[i][j]>num){
int beforeRev = len - 1 - j;
if(beforeRev + a[i][j] - 1 == i){
num=a[i][j];
ans=i;
}
}
}
}
string t=s.substr(ans-num+1,num);
return t;
}
};
注意: