📅  最后修改于: 2023-12-03 15:12:20.691000             🧑  作者: Mango
在 C 语言中,有多种方法来找到一个字符串中最长的连续字符。在本篇文章中,我们将介绍其中两种方法。
首先,我们可以使用一个循环来查找字符串中最长的连续字符。在代码中,我们通过循环遍历字符串,并使用一个计数器变量来计算连续字符的数量。如果遇到一个不同的字符,则将计数器重置为 1。
代码如下:
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int i, count = 1, max_count = 1;
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
for (i = 1; str[i] != '\0'; i++) {
if (str[i] == str[i - 1]) {
count++;
} else {
if (count > max_count) {
max_count = count;
}
count = 1;
}
}
if (count > max_count) {
max_count = count;
}
printf("Maximum consecutive characters: %d\n", max_count);
return 0;
}
解释:
str
来存储用户输入的字符串。count
和 max_count
,用于保存当前的连续字符数量和最大的连续字符数量。fgets()
函数来获取用户输入的字符串,并检查字符串的长度是否超过数组 str
的大小。for
循环遍历字符串 str
中的每个字符,当遇到连续相同字符时,增加计数器 count
的值。当遇到不同字符时,将 count
与 max_count
进行比较,更新最大连续字符数量。另外一种方法是使用递归来查找最长的连续字符。我们可以将字符串不断拆分成更小的子串,然后在每个子串中查找最长的连续字符。
代码如下:
#include <stdio.h>
#include <string.h>
int count_consecutive_chars(char str[], int length) {
if (length == 1) {
return 1;
}
int count = 1, max_count = 1;
if (str[length - 1] == str[length - 2]) {
count = count_consecutive_chars(str, length - 1) + 1;
} else {
count_consecutive_chars(str, length - 1);
}
if (count > max_count) {
max_count = count;
}
return max_count;
}
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0';
int max_count = count_consecutive_chars(str, strlen(str));
printf("Maximum consecutive characters: %d\n", max_count);
return 0;
}
解释:
count_consecutive_chars()
来查找最长的连续字符。在每个递归步骤中,我们将字符串不断拆分成更小的子串,在子串中查找最长的连续字符。count
,用于记录当前连续字符的数量。如果当前字符与前一个字符相同,我们增加计数器变量的值。否则,递归查找更小的子串。max_count
的值,并返回最大连续字符数量。main()
函数中,我们获取用户输入的字符串,并调用 count_consecutive_chars()
函数来查找最大的连续字符数量。最后,我们输出结果。这两种方法都可以用来查找一个字符串中最长的连续字符。使用循环的方法更加简单直接,使用递归的方法更加优雅简洁。尽管两种方法的时间复杂度都为 O(n),使用递归的方法空间复杂度更高。使用哪种方法取决于具体的场景和需求。