/* 在两个字符串中找到最长的公共子串 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//查找字符串shortstr与字符串longstr的最长公共子串substr,并返回其长度
int lcs(const char* shortstr, const char* longstr, char * substr) {
int i = 0;
int j = 0;
if (strstr(longstr, shortstr) != NULL) //先判断短字符串是否存在于长字符串中
{
memcpy(substr, shortstr, strlen(shortstr) + 1);
return strlen(substr);
}
for (i = strlen(shortstr) - 1; i > 0; i--) //逐渐缩短长度,判断 字符串是否存在于长字符串中
{
for (j = 0; j <= strlen(shortstr) - i; j++) {
memcpy(substr, &shortstr[j], i);
substr[i] = '\0';
if (strstr(longstr, substr) != NULL)
return strlen(substr);
}
}
return strlen(substr);
}
int main() {
char *a = "abcdabefab";
char *b = "abeabfab";
char *substr = (char*) malloc(10);
int c = lcs(b, a, substr);
printf("%s\n", substr);
printf("%d\n", c);
return 0;
}
输出结果:
abe
3