This documentation is automatically generated by online-judge-tools/verification-helper
#include "src/algorithm/RLE.hpp"
std::vector<std::pair<T, int>> rle(const std::vector<T>& ins)
引数に入れたvector
を連長圧縮します。
例えば、aaabbcdaddd
は(a, 3)(b, 2)(c, 1)(d, 1)(a, 1)(d, 3)
になります。
std::vector<T>
かstd::string
を引数にとることができます。
std::string
を引数に入れた場合、std::vector<std::pair<char, int>>
が返ります。
配列の長さを $N$ として $O(N)$
#pragma once
#include <vector>
#include <utility>
#include <string>
namespace zawa {
template <typename T>
std::vector<std::pair<T, int>> rle(const std::vector<T>& ins) {
std::vector<std::pair<T, int>> res;
for (size_t i = 0 ; i < ins.size() ; i++) {
if (res.empty() or res.back().first != ins[i]) {
res.emplace_back(ins[i], 1);
}
else {
res.back().second++;
}
}
return res;
}
std::vector<std::pair<char, int>> rle(const std::string& s) {
std::vector<char> in(s.begin(), s.end());
return rle(in);
}
} // namespace zawa
#line 2 "src/algorithm/RLE.hpp"
#include <vector>
#include <utility>
#include <string>
namespace zawa {
template <typename T>
std::vector<std::pair<T, int>> rle(const std::vector<T>& ins) {
std::vector<std::pair<T, int>> res;
for (size_t i = 0 ; i < ins.size() ; i++) {
if (res.empty() or res.back().first != ins[i]) {
res.emplace_back(ins[i], 1);
}
else {
res.back().second++;
}
}
return res;
}
std::vector<std::pair<char, int>> rle(const std::string& s) {
std::vector<char> in(s.begin(), s.end());
return rle(in);
}
} // namespace zawa