【笔记】TX笔试-压缩算法

牛客网-压缩算法

小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;
}
原文地址:https://www.cnblogs.com/acmer-hmin/p/13546809.html