最长回文子序列模板

来源:互联网 发布:windows怎么升级版本 编辑:程序博客网 时间:2024/04/30 06:29

给一个字符串,找出它的最长的回文子序列LPS的长度。例如,如果给定的序列是“BBABCBCAB”,则输出应该是7,“BABCBAB”是在它的最长回文子序列。


#include <iostream>#include <cstdio>#include <cstring>using namespace std;char str[2005];int dp[2005][2005];void init(){memset(str,'\0',sizeof(str));memset(dp,0,sizeof(dp));}int main(){init();cin>>str;int len = strlen(str);for(int i=len-1;i>=0;i--){dp[i][i] = 1;for(int j=i+1;j<len;j++){if(str[i] == str[j]){dp[i][j] = dp[i+1][j-1]+2;//如果两个字符相等,则回文子序列长度+2 }else{dp[i][j] = max(dp[i+1][j],dp[i][j-1]);//否则取相邻两端子序列长度的最大值 }}}printf("%d\n",dp[0][len-1]);return 0;}


0 0
原创粉丝点击