C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++三级练习 luogu-B2123 字符串 p 型编码
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。
luogu-B2123 字符串 p 型编码
题目要求
题目描述
给定一个完全由数字字符('0','1','2',…,'9')构成的字符串 str ,请写出 str 的 p 型编码串。例如:字符串
122344111可被描述为1个1、2个2、1个3、2个4、3个1,因此我们说122344111的 p 型编码串为1122132431;类似的道理,编码串101可以用来描述1111111111;00000000000可描述为11个0,因此它的p型编码串即为110;100200300可描述为1个1、2个 0、1个2、2个0、1个3、2个0,因此它的 p 型编码串为112012201320。
输入格式
输入仅一行,包含字符串 str。每一行字符串最多包含 个数字字符。
输出格式
输出该字符串对应的 型编码串。
输入输出样例 #1
输入 #1
122344111
输出 #1
1122132431
题目分析
解题思路
- 读取一个由数字字符组成的字符串
- 遍历字符串中的每个字符:
- 统计当前数字字符连续出现的次数
- 当遇到不同的数字字符时:
- 将前一个数字的出现次数和数字本身加入结果
- 重置计数器
- 更新当前正在统计的数字
- 处理最后一组数字:
- 将最后一个数字的出现次数和数字本身加入结果
复杂度分析:
- 时间复杂度为 ,其中n为输入字符串的长度
- 空间复杂度为 ,其中n为输入字符串的长度(最坏情况下,每个数字都不相同)
示例代码
#include <iostream>
#include <string>
int main() {
// 用于存储输入的字符串
std::string str;
std::cin >> str;
// 用于存储最终的p型编码结果
std::string result;
// 初始化计数器和当前字符
int cur_count = 1; // 记录当前字符的连续出现次数
char cur_char = str[0]; // 记录当前正在统计的字符
// 从第二个字符开始遍历字符串
for (int i = 1; i < str.length(); i++) {
if (str[i] == cur_char) {
// 如果当前字符与前一个字符相同,计数器加1
cur_count++;
} else {
// 如果遇到不同的字符:
// 1. 将当前统计结果添加到结果字符串
// 2. 重置计数器
// 3. 更新当前字符
result += std::to_string(cur_count) + cur_char;
cur_count = 1;
cur_char = str[i];
}
}
// 处理最后一组字符
result += std::to_string(cur_count) + cur_char;
// 输出p型编码结果
std::cout << result;
return 0;
}
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
【GESP】C++三级练习BCQM3091,选择题判定
GESP三级字符串string和一级知识点if-else分支语句练习,非常基础,对于我孩子来说练习重点在一级部分,字符串只是碰巧遇到了。
【GESP】C++三级练习 luogu-B2109 统计数字字符个数
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★✮☆☆☆。
【GESP】C++三级练习 luogu-B2110 找第一个只出现一次的字符
GESP三级练习,字符串和数组练习(C++三级大纲中5号知识点,一维数组和6号知识点,字符串),难度★★☆☆☆。
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com