LCS

关于最大公共子序列,自己写了个程序

程序只要输入两个字符串就ok了

一直不明白:最长公共子串和最长公共子序列的区别。
  
   上网查了下,最长公共子串(Longest Common Substirng)和最长公共子序列(Longest Common Subsequence,LCS)的区别为:子串是串的一个连续的部分,子序列则是从不改变序列的顺序,而从序列中去掉任意的元素而获得新的序列;也就是说,子串中字符的位置必须是连续的,子序列则可以不必连续

 

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <cstring>
 4 using namespace std;
 5 char a[2005];
 6 char b[2005];
 7 int dp[2005][2005];
 8 int max(int a,int b)
 9 {
10     return a>b?a:b;
11 }
12 int main()
13 {
14     int Case;
15     int i,j;
16     while(1)
17     {
18         memset(dp,0,sizeof(dp));
19         scanf("%s",&a[1]);
20         scanf("%s",&b[1]);//注意这里从1开始
21         for(i=1;a[i]!='\0';i++)//注意这里不可以用strlen,因为字符串从第一个开始存,而不是第0个
22         {
23             for(j=1;b[j]!='\0';j++)
24             {
25                 if(a[i]==b[j])
26                 {
27                     dp[i][j]=dp[i-1][j-1]+1;
28                 }
29                 else
30                 {
31                     dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
32                 }
33             }
34         }
35     printf("%d\n",dp[--i][--j]);
36     }
37 
38     return 0;
39 }

嗯,但是这个不能求最大公共字串。

posted on 2012-08-18 21:26  矮人狙击手!  阅读(269)  评论(0编辑  收藏  举报

导航