求公共最长子序列

来源:互联网 发布:java项目开发视频 编辑:程序博客网 时间:2024/05/19 23:53
题目属于老题,就不再复述了,直接贴代码。
/* LCS公共最大子序列 dp[i][j]=0;//i=0||j=0时。 dp[i][j]=dp[i-1][j-1]+1;//s[i]==t[j]时 dp[i][j]=max(dp[i-1][j],dp[i][j-1]);//s[i]!=t[j]时 根据这个规律很容易写出代码*/#include<iostream>#include<cstring>using namespace std;const int MAX=100;int swap(int &a,int &b){  int tmp=a;  a=b;  b=tmp;}int LCS(const char *str1,const char *str2){   int dp[MAX][MAX];   int len1=strlen(str1);   int len2=strlen(str2);   if(len1==0||len2==0)     return 0;   for(int i=0;i<=len1;++i)     dp[i][0]=0;   for(int j=0;j<=len2;++j)     dp[0][j]=0;      for(int i=1;i<=len1;i++)   {     for(int j=1;j<=len2;j++)     {      if(str1[i]==str2[j])         dp[i][j]=dp[i-1][j-1]+1;      else         dp[i][j]=max(dp[i-1][j],dp[i][j-1]);     }   }   return dp[len1][len2];}int main(){   char *str="ABCBDAB";   char *str1="BDCABA";   cout<<LCS(str,str1)<<endl;      return 0;}

0 0