如果字符串的一个子串(其长度大 1)的各个字符均相同,则称之为等值子串。试设计一算 法:输入字符串 S,以‘!’为结束标志,如果串 S 中不存在等值子串,则输出信息:” 无等值子串”,否则求出(输出)一个长度最大的等值子串。用c语言实现
时间: 2023-12-03 08:45:03 浏览: 54
以下是使用C语言实现的算法:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int main() {
char s[MAX_LEN];
fgets(s, MAX_LEN, stdin);
int len = strlen(s) - 1; // 不包括 '\n'
int max_len = 0, max_index = -1;
for (int i = 0; i < len; i++) {
int count = 1;
while (i + count < len && s[i + count] == s[i]) {
count++;
}
if (count > max_len) {
max_len = count;
max_index = i;
}
}
if (max_len > 1) {
printf("最长等值子串是:");
for (int i = 0; i < max_len; i++) {
putchar(s[max_index + i]);
}
printf("\n");
} else {
printf("无等值子串\n");
}
return 0;
}
```
算法思路:
遍历字符串,对于每个字符,向后查找连续相同字符的个数(`count`),如果 `count` 大于最大长度,则更新最大长度和最大长度子串的起始位置(`max_len` 和 `max_index`)。
最后判断最大长度是否大于1,如果是,则输出最长等值子串,否则输出“无等值子串”。