字符串 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。每一行字符串最多包含 1000 1000 1000 个数字字符。
输出格式
输出该字符串对应的 p p p 型编码串。
样例 #1
样例输入 #1
122344111
样例输出 #1
1122132431
做题背景
今天加训太辛苦,奖励自己一次。 奖励自己一个入门题。
原题
洛谷B2123——传送门
思路&代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
string s;
cin >> s;
int cnt = 0;
char c;
s = 'y' + s; // 加入一个无关字符,便于遍历
for (int i = 1; i < s.size(); i++)
{
if (s[i] != s[i - 1]) // 每次遇到不相等时,说明这是一个新字符
{
if (i != 1) // 如果i不等于1,则先前存在旧字符,需要输出它的信息:即字符个数和字符本身
{
cout << cnt << c;
}
c = s[i]; // 记录该字符
cnt = 1; // 当前该字符个数为1
}
else
{
cnt++; // 有重复,该字符个数++
}
}
cout << cnt << c; // 输出最后一个遇到的新字符的信息
return 0;
}