class Solution {
public:
    string decodeString(string s) {
        //使用两个栈,数字与字符
        stack<int> stk_num;
        stack<string> stk_str;
        int current_num = 0;
        string current_str;  //当前括号内的字符串

        for(char c:s){
            if(isdigit(c)){
                current_num = current_num*10 + c - '0';  //char 转 数字
            }else if(c == '['){    
                //遇到左括号,入栈,稍后再处理
                stk_num.push(current_num);
                current_num = 0;
                stk_str.push(current_str);
                current_str.clear();
            }else if(c == ']'){
                //遇到右括号,出栈结清一次
                string strprev = stk_str.top();
                stk_str.pop();
                string newstring;
                for(int i=0; i<stk_num.top(); i++){ //重复
                    newstring = current_str+newstring;
                }
                stk_num.pop();
                current_str = strprev + newstring;
            }else{
                current_str = current_str + c;  //记录当前括号字符
            }
        }
        return current_str;
    }
};