C语言输入2个字符,要求输出最长的公共子串
时间: 2023-10-09 12:08:51 浏览: 274
以下是使用暴力法(Brute-Force)求解最长公共子串的C语言代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
printf("请输入两个字符串:\n");
scanf("%s%s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2);
int max_len = 0, max_i = -1, max_j = -1;
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
int k = 0;
while (str1[i+k] == str2[j+k] && i+k < len1 && j+k < len2) {
k++;
}
if (k > max_len) {
max_len = k;
max_i = i;
max_j = j;
}
}
}
if (max_len == 0) {
printf("没有公共子串。\n");
} else {
printf("最长公共子串为:");
for (int i = 0; i < max_len; i++) {
printf("%c", str1[max_i+i]);
}
printf("\n");
}
return 0;
}
```
这里使用两层循环枚举所有可能的子串,然后再用一个while循环找到最长的公共子串。时间复杂度为O(n^3),对于较长的字符串会比较慢。
如果需要更快的算法,可以考虑使用动态规划(Dynamic Programming)或后缀数组(Suffix Array)等方法。
阅读全文
相关推荐
















