最大公共子串(C语言实现)

来源:互联网 发布:西安 java 软件公司 编辑:程序博客网 时间:2024/05/21 17:24

给定两个字符串A和B,输出A和B中的最大公共子串。比如A=”aocdfe”,B=”pmcdfa”,则输出“cdf”
方法1:

#include<stdio.h>#include<stdlib.h>#include<string.h>char *commstring(char *str1,char *str2){    char *s1,*s2;    int i,j;    int len1,len2;    if(strlen(str1)>strlen(str2))    {        s1=str1;        s2=str2;        len1=strlen(str1);        len2=strlen(str2);    }    else    {        s1=str2;        s2=str1;        len1=strlen(str2);        len2=strlen(str1);    }    char *substr=(char *)malloc(256);    if(strstr(s1,s2)!=NULL)        return s2;     for(i=len2-1;i>0;i--)     {         for(j=0;j<len1;j++)         {             memcpy(substr,&s2[j],i));             substr[i]='\0';             if(strstr(s1,substr)!=NULL)             return substr;         }     }return NULL;}

方法2:

int GetCommon(char *s1,char *s2,char **r1,char **r2){    int len1=strlen(s1);    int len2=strlen(s2);    int maxlen=0;     for(int i=0;i<len1;i++)         for(int j=0;j<len2;j++)         {             if(s1[i]==s2[j])            {                int start1=i,start2=j,count=1;                while(start1+1<len1 && start2+1<len2 && s1[start1]==s2[start2])                {                    start1++;                    start2++;                    count++;                }                if(count>maxlen)                {                    maxlen=count;                    *r1=s1+i;                    *r2=s2+j;                }        }         }}
0 0