最长公共子序列

最长公共子序列(LCS)

  1. 子串:表示连续的一串字符 。
  2. 子序列:表示不连续的一串字符。

其实LCS看起来很麻烦,找不到思路,如果暴力破解可能要O(n^4)了,而这个题目使用动态规划的思想也非常简单,

是因为之前的动态规划问题例如:背包问题,生产线问题,都是一维数组空间内的结果,规划到一个线性时间内,而这个题目需要O(m*n)的时间复杂度和空间复杂度。

思路:

废话不多说,代码 走起:

int lcs(string a,string b)
{
   int max_=0;
   memset(v,0,sizeof(v));
   a=' '+a;
   b=' '+b;    
   for(int i=1;i<a.length();++i) c[i][0]=0;
   for(int j=1;j<b.length();++j) c[0][j]=0;
   for(int i=1;i<a.length();++i)
      for(int j=1;j<b.length();++j)
   {
      if(a[i]==b[j])
      {
         v[i][j]=v[i-1][j-1]+1;
      }
      else
      {
         v[i][j]=max(v[i-1][j],v[i][j-1]);
      }
      max_=max(max_,v[i][j]);
   }
   return max_;
}

 

posted @ 2019-02-02 11:00  阿斯水生产线  阅读(148)  评论(0)    收藏  举报