字符串p型编码

GitHub跳转原题关系图返回列表

线性扫描数字串,统计每段相同连续字符的长度并输出计数和字符。

OJ: noi_openjudge

题目 ID: ch0107-31

难度:入门

标签:字符串模拟python

日期: 2026-07-30 23:01

题意

对数字串做 p 型编码:每段连续相同字符输出“重复次数 + 字符”。

思路

维护当前连续段的 count。扫描到不同字符或字符串末尾时,输出上一段,再将计数重置为 11

代码

cpp
#include <cstdio>
#include <cstring>

char s[1005];
int main(){
    scanf("%s",s+1);
    int cnt = 1;
    int len = strlen(s+1);
    int i;
    for (i=2;i<=len+1;i++){
        if( s[i] == s[i-1]){
            cnt++;
        }
        else {
            printf("%d",cnt);
            printf("%c",s[i-1]);
            cnt = 1;
        }
    }
    return 0;
}

复杂度

总结

Python代码

python
text = input().strip()
parts = []
count = 1

for index in range(1, len(text) + 1):
    if index < len(text) and text[index] == text[index - 1]:
        count += 1
    else:
        parts.append(f"{count}{text[index - 1]}")
        count = 1

print("".join(parts))

C++代码

cpp
#include <cstdio>
#include <cstring>

char s[1005];
int main(){
    scanf("%s",s+1);
    int cnt = 1;
    int len = strlen(s+1);
    int i;
    for (i=2;i<=len+1;i++){
        if( s[i] == s[i-1]){
            cnt++;
        }
        else {
            printf("%d",cnt);
            printf("%c",s[i-1]);
            cnt = 1;
        }
    }
    return 0;
}

复杂度

时间复杂度为 O(n)O(n),输出空间为 O(n)O(n)

总结

处理连续段时,把“到达末尾”与“遇到不同字符”统一为一段结束条件。