讨论/《队列 & 栈》 - 字符串解码/
《队列 & 栈》 - 字符串解码

cpp


class Solution {
public:
    string decodeString(string s) {
        string ans;
        // 采用了两个栈,一个数字栈,一个字符栈
        stack<string> strs;
        stack<int> nums;

        int num = 0;

        for(int i = 0; i < s.size(); i++){
            // 判断是否为数字 是的话压入栈
            if(s[i] >= '0' && s[i] <= '9'){
                num = num*10 + (s[i] - '0');
            }

            // 不断的收集s中的字母
            else if(s[i] >= 'a' && s[i] <= 'z'){
                ans = ans + s[i];
            }

            // 遇到[字符,将收集到的数字压入栈,同时将数字置为0
            // (题目说了K为正整数,即一定存在 不可以为[abc]这样的形式)
            // 将之前收集到字符串压入字符栈
            else if(s[i] == '['){
                nums.push(num);
                num = 0;
                strs.push(ans);
                ans = "";
            }
            else if(s[i] == ']'){
                int number = nums.top();
                nums.pop();
                string tem = ans;
                for(int i = 0; i < number - 1; i++){
                    ans += tem;
                }

                string newStr = strs.top();
                strs.pop();
                ans = newStr + ans;
            }
            
        }

        return ans;

    }
};


展开全部 3 讨论