C语言求一个串中出现的第一个最长重复子串 【问题描述】 采用顺序结构存储串,编写一个程序,求串s中出现的第一个最长重复子串。如果没有则输出"没有最长重复子串"; 【输入形式】 输入一个字符串。 【输出形式】 输出最长重复子串。 【样例输入】 aababcabcdababcdeabcdefabcdefgabcdefgh 【样例输出】 abcdefg
时间: 2023-12-01 08:02:29 浏览: 136
下面是求解串中出现的第一个最长重复子串的函数实现代码:
```c
void findLongestRepeatSubstr(char *s)
{
int maxLen = 0; // 最长重复子串的长度
int maxIndex = 0; // 最长重复子串的起始位置
// 枚举所有子串
for(int i=0; i<strlen(s); i++)
{
for(int j=i+1; j<strlen(s); j++)
{
// 如果找到了一个重复子串
if(s[i] == s[j])
{
// 判断这个重复子串的长度是否大于当前最长重复子串的长度
int len = 1; // 重复子串的长度
while(s[i+len] == s[j+len] && i+len<j)
{
len++;
}
if(len > maxLen)
{
maxLen = len;
maxIndex = i;
}
}
}
}
// 输出最长重复子串
if(maxLen > 0)
{
printf("%.*s\n", maxLen, s+maxIndex);
}
else
{
printf("没有最长重复子串\n");
}
}
```
这个函数的实现思路比较简单,就是枚举所有子串,然后判断每个子串是否重复,如果重复则计算出重复子串的长度,如果长度大于当前最长重复子串的长度,则更新最长重复子串的长度和起始位置。最后输出最长重复子串即可。如果没有最长重复子串,则输出"没有最长重复子串"。注意,这个函数的时间复杂度比较高,为 $O(n^3)$,只适用于较短的字符串。
阅读全文