luogu-B2126 连续出现的字符
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。
luogu-B2126 连续出现的字符
题目要求
题目描述
给定一个字符串,在字符串中寻找第一个连续出现次数不低于 次的字符。
输入格式
行。第 行是 ;第 行是仅包含大小写字母的字符串。
输出格式
字符串中第一个连续出现次数不低于
k
次的字符。如果没有符合条件的字符,输出No
。
输入输出样例 #1
输入 #1
3
abcccaaab
输出 #1
c
说明/提示
,字符串长度不超过 。
题目分析
解题思路
- 读取连续出现次数的阈值
- 读取待检查的字符串
str
- 遍历字符串中的每个字符:
- 记录当前字符的连续出现次数
count
- 如果当前字符与前一个字符相同:
count
加 - 否则:重置
count
为 - 如果
count
:输出当前字符并结束程序
- 记录当前字符的连续出现次数
- 如果遍历结束仍未找到符合条件的字符,输出 “No”
复杂度分析:
- 时间复杂度为 ,其中 为字符串长度
- 空间复杂度为 ,只需要存储计数器和当前字符
示例代码
#include <iostream>
#include <string>
int main() {
// 读取连续出现次数的阈值k
int k;
std::cin >> k;
// 读取待检查的字符串
std::string str;
std::cin >> str;
// 初始化计数器和当前字符
int count = 1; // 当前字符的连续出现次数
char cur_c = str[0]; // 当前正在检查的字符
// 遍历字符串中的每个字符(从第二个字符开始)
for (int i = 1; i < str.length(); i++) {
if (str[i] == cur_c) {
// 如果当前字符与前一个字符相同,计数器加1
count++;
} else {
// 如果当前字符与前一个字符不同,重置计数器并更新当前字符
cur_c = str[i];
count = 1;
}
// 检查是否找到符合条件的字符
if (count >= k) {
// 找到连续出现k次及以上的字符,输出并结束程序
std::cout << cur_c << std::endl;
return 0;
}
}
// 未找到符合条件的字符,输出"No"
std::cout << "No";
return 0;
}
本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

最后更新于