【深基5.习10】压缩技术(续集版) · 教师题解

【深基5.习10】压缩技术(续集版)

解题思路

由第一行长度确定 N,把 N 行按顺序连接。初始当前位为 0,连续相同则计数,遇到不同位先输出段长再切换;最后输出末段。

正确性说明

每次字符变化都是一个极大连续段的边界,逐段记录长度正是压缩规则;第一位为 1 时会先输出 0 长的零段。

易错点

不要在每行边界重置计数;末段必须输出;开头先输出 N。

复杂度

时间 O(N²),空间 O(N²)。

参考代码(C++11)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    string line, s;
    cin >> line;
    int n = line.size();
    s = line;
    for (int i = 1; i < n; i++) {
        cin >> line;
        s += line;
    }
    cout << n;
    char bit = '0';
    int count = 0;
    for (char c : s) {
        if (c == bit)
            count++;
        else {
            cout << " " << count;
            bit = c;
            count = 1;
        }
    }
    cout << " " << count << "\n";
    return 0;
}
返回题目