使用C语言编码:给定一个长度为n的字符串S和有一个数字a,统计长度大于等于a的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。编程要求:第一行输入数字a。 第二行输入字符串S。第三行输出结果
时间: 2023-06-01 15:03:44 浏览: 86
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 1000000
char S[MAX_N + 1];
int cnt[MAX_N + 1];
int main() {
int a, n;
scanf("%d%s", &a, S);
n = strlen(S);
int max_cnt = 0, max_len = 0, max_pos = 0;
for (int i = 0; i < n; ++i) {
for (int j = i + a; j <= n; ++j) {
int len = j - i;
cnt[len] += (strncmp(S + i, S + j, len) == 0);
if (cnt[len] > max_cnt || (cnt[len] == max_cnt && len > max_len)) {
max_cnt = cnt[len];
max_len = len;
max_pos = i;
}
}
}
printf("%.*s\n", max_len, S + max_pos);
return 0;
}
```
阅读全文