时间O(n^2)
空间O(1)
//测试通过
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool record[1024][1024];
string expand(string s,int l,int r){
int ll = l,rr = r;
while(ll>=0 && rr<s.length() && s[ll] == s[rr]){
ll--;
rr++;
}
ll++;
rr--;
return s.substr(ll,rr-ll+1);
}
string longestPalindromeDP(string s){
string ret = s.substr(0,1);
for(int i=0;i<s.length();i++){
string back = expand(s,i,i);
if(back.length()>ret.length()){
ret = back;
}
}
for(int i=0;i<s.length()-1;i++){
string back = expand(s,i,i+1);
if(back.length()>ret.length()){
ret = back;
}
}
return ret;
}
int main(int argc, const char * argv[]) {
cout<<longestPalindromeDP("aaabaaaa")<<endl;
return 0;
}