#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int func(const char *str1, const char *str2)
{
int maxLen = 0; //max length of the substring
int k=0; //temporary length of the substring
const char *maxStr = NULL; // max substring point
int len1 = strlen(str1);
int len2 = strlen(str2);
for (int i=0;i<len1;i++)
{
for (int j=0;j<len2;j++)
{
if (str1[i+k] == str2[j])
{
k++;//子串长度加1
if (maxLen<k)
{
maxStr=str1+i; //如果发现更长的子串,那么将当maxStr指针指向第一个字符串的i个字符
maxLen=k;
printf("包含最长子串的母串%s\n",maxStr);
}
}
else
{
if (k==0)
{//如果k为0代表下一次循环的比较的开始
continue;
}
if(j!=0){//如果不是第一次比较
j=j-k+1; //向前回缩k-1个
}
k=0; //如果比较不成功那么子串长度设置为0
}
}
}
if (maxLen ==0)
{
printf("没有公共子串\n");
return 0;
}
char buf[250];
memset(buf,0,sizeof(buf));
strncpy(buf,maxStr,maxLen);
printf("最大公共子串:%s\n",buf);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
const char* str1 = "yum123abc456def";
const char* str2 = "c123cdelmabc4dd123abc4defabc456def";
func(str1,str2);
system("pause");
return 0;
}c 求最大公共子串的实现
最新推荐文章于 2021-12-21 09:45:49 发布
3295

被折叠的 条评论
为什么被折叠?



