小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;
}