连续出现的字符
题目描述
给定一个字符串,在字符串中寻找第一个连续出现次数不低于 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"。