1. 程式人生 > 實用技巧 >【筆記】TX筆試-壓縮演算法

【筆記】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;
}