Open licoded opened 10 months ago
#include <iostream> #include <cstring> #include <stack> using namespace std; string decompress(const string &compressed_) { string compressed = compressed_; stack<char> stack; while (!stack.empty()) stack.pop(); for (char c : compressed) { if (c == ')') { vector<char> v; while (stack.top() != '(') { v.push_back(stack.top()); stack.pop(); } stack.pop(); int times = stack.top() - '0'; stack.pop(); for (int i = 0; i < times; i++) { for (int j = v.size() - 1; j >= 0; j--) { stack.push(v[j]); } } } else { stack.push(c); } } string res = ""; while (!stack.empty()) { res += stack.top(); stack.pop(); } reverse(res.begin(), res.end()); return res; } int main() { string compressed = "2(a3(b))2(cd)e2(f)"; // string compressed = "2(a3(b))"; // string compressed = "2(a)"; string decompressed = decompress(compressed); cout << decompressed << endl; return 0; }