用c语言试设计一算 法:输入字符串 S,以‘!’为结束标志,如果串 S 中不存在等值子串,则输出信息:” 无等值子串”,否则求出(输出)一个长度最大的等值子串。
时间: 2023-12-17 14:04:29 浏览: 61
以下是一个基于暴力枚举的 C 语言算法实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
int main() {
char s[MAX_LENGTH];
int i, j, k, max_len = 0, max_i = 0, max_j = 0;
printf("请输入字符串 S(以 ! 结束):");
scanf("%s", s);
for (i = 0; s[i] != '!'; i++) {
for (j = i + 1; s[j] != '!'; j++) {
int len = j - i + 1;
if (len <= max_len) {
continue;
}
int is_equal = 1;
for (k = 0; k < len / 2; k++) {
if (s[i + k] != s[j - k]) {
is_equal = 0;
break;
}
}
if (is_equal) {
max_len = len;
max_i = i;
max_j = j;
}
}
}
if (max_len == 0) {
printf("无等值子串\n");
} else {
printf("长度最大的等值子串为:");
for (i = max_i; i <= max_j; i++) {
printf("%c", s[i]);
}
printf("\n");
}
return 0;
}
```
该算法的时间复杂度为 $O(n^3)$,不适合处理大规模的字符串。可以使用更加高效的算法,例如 KMP 算法等。
阅读全文