最长回文子序列:字符串反转+动态规划,最长公共子序列LCS算法

来源:互联网 发布:烛魔枪一段数据 编辑:程序博客网 时间:2024/04/27 09:03

题目思想大概是这样:cabbeaf:回文子序列有:c,a,aa,bb,,aba,abba,e,f,最长的就是abba,所以输出长度为4

状态转移关系如下:


#include <iostream>#include <algorithm>#include <string>int dp[1000][1000];using namespace std;int main(){//思路就是求这个原字符串和它反转字符串的最长公共子序列  string str;  cin>>str;  string a=str;  reverse(a.begin(),a.end());  int len=str.length();  for(int i=1;i<=len;i++){    for(int j=1;j<=len;j++){      if(str[i-1]==a[j-1]){        dp[i][j]=dp[i-1][j-1]+1;      }      else{        dp[i][j]=max(dp[i-1][j],dp[i][j-1]);      }    }  }    cout<<dp[len][len];  return 0;}


0 0
原创粉丝点击