最长公共子串

来源:互联网 发布:linux xargs命令 编辑:程序博客网 时间:2024/05/22 13:40

#include<stdio.h>#include<malloc.h>#include<string.h>#include<algorithm>using namespace std;const int MAX = 300;char a[MAX],b[MAX];void cp(char *str1, char *str2){    int i,j,k,len1,len2,mm,x,y;    len1 = strlen(str1);    len2 = strlen(str2);    int c[MAX][MAX];    for(i = 0; i < len1+1; i++)        c[i][0]=0;    for(j = 0; j < len2+1; j++)        c[0][j]=0;    mm = -1;    for(i = 1 ; i < len1+1 ; i++)    {        for(j = 1; j < len2+1; j++)        {            if(str1[i-1]==str2[j-1])                c[i][j]=c[i-1][j-1]+1;            else                c[i][j]=0;            if(c[i][j]>mm)            {                mm=c[i][j];                x=i;                y=j;            }        }    }    char s[1000];    k=mm;    i=x-1,j=y-1;    s[k--]='\0';    while(i>=0 && j>=0)    {        if(str1[i]==str2[j])        {            s[k--]=str1[i];            i--;            j--;        }        else            break;    }    if(strlen(s))    {        printf("最长公共子串为:");        puts(s);    }    else        puts("没有公共子串!");    free(c);}int main(void){    while(~scanf("%s",a))    {        getchar();        gets(b);        cp(a, b);    }    return 0;}

0 0