您的位置:首页 > 编程语言 > C语言/C++

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

2015-11-12 20:29 453 查看
给定两个字符串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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: