c精彩编程挑战高手11

来源:百度知道 编辑:UC知道 时间:2024/05/14 04:12:28
用C编程求两个字符串的最长公共子串
以最简代码编写,代码不超过30行。

看似简单的问题,做起来感觉并不简单。有点意思。
#include <stdio.h>
#define N 255

int MaxSubString(char *str1,char *str2,char s[])
{
int i, j, k, index, max=0;
for(i=0; str1[i]; i++)
for(j=0; str2[j]; j++)
{
for(k=0; str1[i+k]==str2[j+k] && (str2[j+k] || str1[i+k]); k++);
if(k>max) /* 出现大于当前子串长度的子串,则替换子串位置和长度 */
{
index = j; max = k;
}
}
for(i=0; i<max; i++)
s[i] = str2[index++];
return max;
}
int main(void)
{ int length;
char str1[N],str2[N],s[N];
printf("Please input two strings:\n");
gets(str1);
gets(str2);
length = MaxSubString(str1, str2,s);
printf("str1: %s\n",str1);
printf("str2: %s\n",str2);
printf("MaxSubString: %s\n",s);
printf("length=%d\n",length);
system("pause");
return 0;
}

连1分都不赏,俺可不帮你做!

到底是不会