【筆記】TX筆試-壓縮演算法
阿新 • • 發佈:2020-08-23
牛客網-壓縮演算法
小Q想要給他的朋友傳送一個神祕字串,但是他發現字串的過於長了,於是小Q發明了一種壓縮演算法對字串中重複的部分進行了壓縮,對於字串中連續的m個相同字串S將會壓縮為m|S,例如字串ABCABCABC將會被壓縮為[3|ABC],現在小Q的同學收到了小Q傳送過來的字串,你能幫助他進行解壓縮麼?
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { stack<string> sta; string s; string tmp; string str; cin>>s; for(int i=0;i<s.length();++i) { if(s[i]=='[') { if(!tmp.empty()) { sta.push(tmp); tmp.clear(); } } else if(s[i]=='|') { sta.push(tmp); tmp.clear(); sta.push("|"); } else if(s[i]==']') { str=tmp; tmp.clear(); while(sta.top()!="|") { str=sta.top()+str; sta.pop(); } sta.pop(); int num=atoi(sta.top().c_str()); sta.pop(); for(int i=1;i<=num;++i) { tmp+=str; } sta.push(tmp); tmp.clear(); } else { tmp+=s[i]; } } string ans; while(!sta.empty()) { ans=sta.top()+ans; sta.pop(); } cout<<ans+tmp; return 0; }