C语言实现:【问题描述】 采用顺序结构存储串,编写一个程序,求串s中出现的第一个最长重复子串。如果没有则输出"没有最长重复子串"; 【输入形式】 输入一个字符串。 【输出形式】 输出最长重复子串。 【样例输入】 aababcabcdababcdeabcdefabcdefgabcdefgh 【样例输出】 abcdefg
时间: 2023-12-01 16:02:10 浏览: 97
去掉重复的字符串及在第一个字符串中删除在第二个字符串中出现的字符
好的,我知道了。这是一道关于字符串处理的算法题。下面是 C 语言实现的代码,供你参考:
```c
#include <stdio.h>
#include <string.h>
#define MAXLEN 100 // 串的最大长度
void MaxRepeatSubstr(char *s, char *maxSubstr) {
int len = strlen(s);
int maxLen = 0, maxStart = 0; // 最长重复子串的起始位置和长度
int i, j, k;
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
k = 0;
while (k < len - j && s[i + k] == s[j + k]) {
k++;
}
if (k > maxLen) {
maxLen = k;
maxStart = i;
}
}
}
if (maxLen == 0) {
strcpy(maxSubstr, "没有最长重复子串");
} else {
strncpy(maxSubstr, s + maxStart, maxLen);
maxSubstr[maxLen] = '\0';
}
}
int main() {
char s[MAXLEN], maxSubstr[MAXLEN];
printf("请输入一个字符串:");
scanf("%s", s);
MaxRepeatSubstr(s, maxSubstr);
printf("最长重复子串是:%s\n", maxSubstr);
return 0;
}
```
程序中的 `MaxRepeatSubstr` 函数实现了求解最长重复子串的功能,具体思路如下:
- 遍历字符串中的每个字符对其进行比较,找出所有的重复子串;
- 记录最长的重复子串的位置和长度;
- 如果没有重复子串,则输出提示信息。
程序运行时,会提示用户输入一个字符串,然后输出最长重复子串。如果没有最长重复子串,则输出提示信息。
阅读全文