C语言实现:【问题描述】 采用顺序结构存储串,编写一个程序,求串s中出现的第一个最长重复子串。如果没有则输出"没有最长重复子串"; 【输入形式】 输入一个字符串。 【输出形式】 输出最长重复子串。 【样例输入】 aababcabcdababcdeabcdefabcdefgabcdefgh 【样例输出】 abcdefg
时间: 2023-12-01 22:02:10 浏览: 92
编写程序求出所给出的字符串中最长的字母子串(以非字母隔开)。
好的,我知道了。这是一道关于字符串处理的算法题。下面是 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` 函数实现了求解最长重复子串的功能,具体思路如下:
- 遍历字符串中的每个字符对其进行比较,找出所有的重复子串;
- 记录最长的重复子串的位置和长度;
- 如果没有重复子串,则输出提示信息。
程序运行时,会提示用户输入一个字符串,然后输出最长重复子串。如果没有最长重复子串,则输出提示信息。
阅读全文