寻找两个串的最长公共子序列

来源:互联网 发布:泉州师范学院软件好吗 编辑:程序博客网 时间:2024/05/22 09:49

思路:

  • 较短串从前向后比较
  • 较长串从后往前比较

代码实现:

#include <iostream>  #include <string>  using namespace std;  string str1="acbac";  string str2="acaccbabb"; int LCS_left;    //最长子串的左边界int LCS_right;   //最长子串的右边界int len[500];  int findmaxlength(string str1,string str2)  {      int max=0;      for(int i=0;i<str1.length();i++)  //较短串从前向后比较    {          for(int j=str2.length()-1;j>=0;j--)  // 较长串从后往前比较        {             if(str1[i]==str2[j])              {                  if(j==0)                {                  len[j]=1;                }                else                {                  len[j]=(len[j-1]+1);                 }                if(max<len[j])                {                    max=len[j];                    LCS_right=j;  //记录右边界                }            }              else len[j]=0;          }      }      return max;  }  int main(){    int max_length= findmaxlength(str1,str2);    int LCS_left=LCS_right-max_length+1;  //计算左边界    cout<<max_length<<endl;    cout<<"最长子序列为:";    for(int i=LCS_left;i<=LCS_right;i++) //打印最长子序列    {      cout<<str2[i]<<" ";    }    system("pause");    return 0;}

结果如下图:
这里写图片描述

0 0