pranay_teja
11/16/2018 - 12:51 PM

LeetCode-DecodeString

#include<bits/stdc++.h>
using namespace std;


// #LeetCode #Stack
// 3
// 3[a]4[bc]2[def]
// 3[a2[c]]
// leetcode
// Output:
// aaabcbcbcbcdefdef
// accaccacc
// leetcode

string decodeString(string s) {
    string dec;
    int i=s.size()-1;
    stack<char> st;
    while(i>=0){
        if(i>0 && s[i]=='['){
            // if number k has more the 1 digit
            int r=i-1;
            int digitcount=0;
            string num;
            while(r>=0 && (s[r]-'0'>=0 && s[r]-'0'<=9)){
                num.insert(num.begin()+0,s[r]);
                r--;
                digitcount++;
            }
            int k=stoi(num); // or use custom function
            string temp;
            while(true){
                if(st.top()==']'){
                    st.pop();
                    break;
                }
                temp.push_back(st.top());
                st.pop();
            }
            while(k--){
                for(int i=temp.size()-1;i>=0;i--){
                    st.push(temp[i]);
                }
            }
            i-=digitcount; // to skip number 123[
        }else{
            st.push(s[i]);
        }
        i--;
    }
    while(!st.empty()){
        dec.push_back(st.top());
        st.pop();
    }
    return dec;
}

int main(){
    // freopen("ip.txt","r",stdin);
    int t;
    cin>>t;
    while(t--){
        string enc;
        cin>>enc;
        cout<<decodeString(enc)<<endl;
    }
    return 0;
}