/*********************************************************/
//文件名:StringCompare.cpp
//程序作者:王丰元
//版本:V1.0
//功能:求两个字符串的最长连续公共子序列的长度
/********************************************************/
#include<stdio.h>
#include<string.h>
#define MAX 50124
unsigned int StringCompare(char *a,char *b)
//输入:两个字符串a,b;
//输出:最长连续公共子序列的长度
//算法描述例子:
//
a:
34567
//
b:
123456789
//34567与
1比较,LMax=0;
//34567与
12比较,Lmax=0;
//34567与
123比较,LMax=0;
//34567与 1234比较,LMax=0;
//34567与12345比较,LMax=0;
//34567与23456比较,LMax=0;
//34567与34567比较,Lmax=5;
//34567与45678比较,LMax=5;
//34567与56789比较,LMax=5;
//34567与6789 比较,LMax=5;
//34567与789
比较,LMax=5;
//34567与89
比较,Lmax=5;
//34567与9
比较,LMax=5;
//最差状态一共比较5+9-1=13次
//实际上对于本例,在第7次比较之后,由于Lmax==5,故停止比较,
{
long int la=strlen(a);
long int lb=strlen(b);
long int lc=la<lb?la:lb;
long int i,j;
long int LMax=0;
long int Len=0;
for(i=1-la;i<lb;i++)
{
Len=0;
for(j=0;j<la;j++)
{
if((i+j>=0)&&(i+j<lb)&&(*(a+j)==*(b+i+j)))
{
Len++;
}else
{
if(Len>LMax) LMax=Len;
if(LMax==lc) break;
Len=0;
}
}
if(Len>LMax) LMax=Len;
if(LMax==lc) break;
}
return LMax;
}
int main(void)
{
char a[MAX];
char b[MAX];
printf("输入字符串A:\n");
scanf("%s",a);
printf("输入字符串B:\n");
scanf("%s",b);
printf("最长连续公共子序列的长度为:%d\n",StringCompare(b,a));
getchar();
getchar();
return 0;
}
[[italic] 本帖最后由 qq95620412 于 2008-1-1 03:33 编辑 [/italic]]