时间O(n^2)
空间O(n^2)
//原题中似乎如果设置纪录的数组需要memset一下,似乎不是全局变量初始化为0
#include <iostream>
#include <string>
#include <vector>
using namespacestd;
bool record[1024][1024];
string longestPalindromeDP(string s){
unsignedint len = s.length();
int i,l;
int maxLen =1;
int sbegin =0;
for(i=0;i<len;i++){
record[i][i] =1;
}
for(i=0;i<len-1;i++){
if(s[i] == s[i+1]){
maxLen = 2;
record[i][i+1] =1;
sbegin = i;
}
}
for(l =3;l<=len;l++){
for(int start =0;start <= len-l;start++){
int end = start + l -1;
if(s[start] == s[end] &&record[start+1][end-1]){
record[start][end] =1;
maxLen = l;
sbegin = start;
}
}
}
return s.substr(sbegin,maxLen);
}
int main(int argc,const char * argv[]) {
cout<<longestPalindromeDP("ababc")<<endl;
return0;
}