C语言编程【问题描述】 采用顺序结构存储串,编写一个程序,求串s中出现的第一个最长重复子串。如果没有则输出"没有最长重复子串"; 【输入形式】 输入一个字符串。 【输出形式】 输出最长重复子串。 【样例输入】 aababcabcdababcdeabcdefabcdefgabcdefgh 【样例输出】 abcdefg
时间: 2023-11-30 17:04:46 浏览: 81
以下是一个 C 语言程序,实现了你的需求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义最大字符串长度
int main() {
char s[MAX_LEN + 1]; // 定义字符串 s
scanf("%s", s); // 输入字符串 s
int len = strlen(s); // 获取字符串 s 的长度
int max_len = 0; // 最长重复子串的长度
int max_pos = -1; // 最长重复子串的起始位置
// 枚举所有可能的子串
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
int k = 0;
while (j + k < len && s[i + k] == s[j + k]) {
k++;
}
if (k > max_len) {
max_len = k;
max_pos = i;
}
}
}
// 输出最长重复子串
if (max_len > 0) {
printf("%.*s\n", max_len, s + max_pos);
} else {
printf("没有最长重复子串\n");
}
return 0;
}
```
这个程序的思路是枚举所有可能的子串,然后依次判断它们是否出现过,如果出现过且长度超过当前最长重复子串的长度,则更新最长重复子串的长度和起始位置。最后输出最长重复子串即可。
阅读全文