给定一个字符串,在字符串中找到第一个连续出现至少k次的字符。 输入格式: 第一行包含一个正整数k,表示至少需要连续出现的次数。1 <= k <= 100。 第二行包含需要查找的字符串。字符串长度在1到100之间,且不包含任何空白符。用C语言作答
时间: 2024-06-22 16:02:15 浏览: 215
C语言程序设计-分别统计字符串中字母、数字、空格和其他字符出现的次数(字符长度小于80);.c
5星 · 资源好评率100%
在C语言中,要解决这个问题,你可以使用滑动窗口或哈希表的策略。这里是一个简单的滑动窗口方法的思路:
```c
#include <stdio.h>
#include <string.h>
int findKthChar(char str[], int k) {
int n = strlen(str);
int window_start = 0, count = 0;
char prev_char = '\0'; // 初始化为前一个字符
for (int window_end = 0; window_end < n; window_end++) {
if (str[window_end] == prev_char) { // 如果字符相同
count++; // 增加计数
} else {
count = 1; // 当字符变化时,重置计数
}
if (count >= k) { // 如果计数达到k,找到了目标
return window_end; // 返回窗口右边界
}
prev_char = str[window_end]; // 更新前一个字符
}
return -1; // 如果没有找到连续出现至少k次的字符,返回-1
}
int main() {
int k;
scanf("%d", &k);
char str[101];
fgets(str, sizeof(str), stdin); // 注意处理换行符
str[strlen(str) - 1] = '\0'; // 去掉换行符
int result = findKthChar(str, k);
if (result != -1) {
printf("第一个连续出现至少 %d 次的字符的索引是: %d\n", k, result);
} else {
printf("没有找到连续出现至少 %d 次的字符。\n", k);
}
return 0;
}
```
阅读全文