Run Length Encoding ランレングス圧縮

At Coder

文字列を圧縮する基本的なアルゴリズム

同じ文字が続く個数を記述することで圧縮する方法

例1
aaabbbbeee
ランレングス圧縮すると
a3b4e3

例2
AAAABCDEBBBB
A1B1C1D1E1B3

例3
MAEDA
M1A1E1D1A1
例2のように文字の個数がかわらず、圧縮できない時もある!
(なんなら例3は文字数増えちゃっているね:星1: 
汎用性はあんまり高くないやつ!競技プログラミングの問題では、これを利用して解ける問題もまぁまぁある! 例えばABC329のC問題
コード
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    cin >> s;

    vector<pair<char, int>> vec;

    vec.emplace_back(s[0], 0);

    for (auto c : s) {
        if (vec.back().first == c) vec.back().second++;
        else vec.emplace_back(c, 1);
    }

    for (auto c : vec) {
        cout << c.first << c.second;
    }

    return 0;
}

コメント