连续出现的字符
题目描述
给定一个字符串,在字符串中寻找第一个连续出现次数不低于 k k k 次的字符。
输入格式
2 2 2 行。第 1 1 1 行是 k k k;第 2 2 2 行是仅包含大小写字母的字符串。
输出格式
字符串中第一个连续出现次数不低于 k
次的字符。如果没有符合条件的字符,输出 No
。
样例 #1
样例输入 #1
3
abcccaaab
样例输出 #1
c
提示
1 ≤ k ≤ 1000 1\leq k\leq1000 1≤k≤1000,字符串长度不超过 1000 1000 1000。
方法1
解题思路:
本题要求我们在给定的字符串中寻找第一个连续出现次数不低于 k k k 次的字符。我们可以使用一个计数器来记录当前字符连续出现的次数,遍历字符串并更新计数器的值,找到符合条件的字符并返回。
具体步骤如下:
- 定义一个计数器
count
,初始值为 1,用于记录当前字符连续出现的次数。 - 使用
for
循环遍历字符串,从下标 1 开始。 - 如果当前字符与前一个字符相同,则将
count
加 1。- 如果
count
的值达到 k k k,则找到了符合条件的字符,将其转换为字符串并返回。
- 如果
- 如果当前字符与前一个字符不同,则将
count
重置为 1。 - 如果遍历完整个字符串都没有找到符合条件的字符,则返回字符串
"No"
。
C++代码:
#include <iostream>
#include <string>
using namespace std;string findConsecutiveChar(int k, string str) {int n = str.length();int count = 1;for (int i = 1; i < n; i++) {if (str[i] == str[i - 1]) {count++;if (count >= k) {return string(1, str[i]);}} else {count = 1;}}return "No";
}int main() {int k;string str;cin >> k;cin >> str;string result = findConsecutiveChar(k, str);cout << result << endl;return 0;
}
代码解释:
- 定义函数
findConsecutiveChar
,接受两个参数:整数 k k k 和字符串str
。该函数用于寻找字符串中第一个连续出现次数不低于 k k k 次的字符,并返回字符串类型的结果。 - 在函数内部,定义变量
count
用于记录当前字符连续出现的次数,初始值为 1。 - 使用
for
循环遍历字符串,从下标 1 开始。 - 如果当前字符与前一个字符相同,则将
count
加 1。- 如果
count
的值达到 k k k,则找到了符合条件的字符,使用string(1, str[i])
将该字符转换为字符串并返回。
- 如果
- 如果当前字符与前一个字符不同,则将
count
重置为 1。 - 如果遍历完整个字符串都没有找到符合条件的字符,则返回字符串
"No"
。 - 在
main
函数中,读取整数 k k k 和字符串str
。 - 调用
findConsecutiveChar
函数,将 k k k 和str
作为参数传入,获取结果字符串。 - 输出结果字符串。
复杂度分析:
- 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串的长度。我们只需要遍历一次字符串。
- 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数级别的额外空间。
输入输出样例:
输入:
3
abcccaaab
输出:
c
该解决方案使用了一个计数器来记录当前字符连续出现的次数,通过遍历字符串并更新计数器的值,我们可以找到第一个连续出现次数不低于 k k k 次的字符。当找到符合条件的字符时,将其转换为字符串并返回。如果没有找到符合条件的字符,则返回字符串 "No"
。