文字列を圧縮する基本的なアルゴリズム
同じ文字が続く個数を記述することで圧縮する方法
例1 aaabbbbeee ランレングス圧縮すると a3b4e3 例2 AAAABCDEBBBB A1B1C1D1E1B3 例3 MAEDA M1A1E1D1A1
例2のように文字の個数がかわらず、圧縮できない時もある!
(なんなら例3は文字数増えちゃっているね )
汎用性はあんまり高くないやつ!競技プログラミングの問題では、これを利用して解ける問題もまぁまぁある!
(なんなら例3は文字数増えちゃっているね )
汎用性はあんまり高くないやつ!競技プログラミングの問題では、これを利用して解ける問題もまぁまぁある!
コード
#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;
}
コメント