点击打开链接
class Solution {
public:
int longestPalindromeSubseq(string s) {
int size = s.length();
char str1[size+2], str2[size+2];
memset(str1, '\0', sizeof(str1));
memset(str2, '\0', sizeof(str2));
for(int i=0; i<size; i++) str1[i+1] = s[i];
strcpy(str2+1, str1+1);
reverse(str2+1, str2+1+size);
int Maxlen[size+2][size+2];
memset(Maxlen, 0 ,sizeof(Maxlen));
//cout << str1+1 <<" "<<str2+1<<" "<<size<<endl;
int i = 0 , j = 0;
for(i=0; i<=size; i++) Maxlen[i][0] = 0;
for(j=0; j<=size; j++) Maxlen[0][j] = 0;
for(i=1; i<=size; i++){
for(j=1; j<=size; j++){
if(str1[i]==str2[j]){
Maxlen[i][j] = Maxlen[i-1][j-1]+1;
}
else{
Maxlen[i][j] = max(Maxlen[i-1][j], Maxlen[i][j-1]);
}
}
}
return Maxlen[size][size];
}
};