leetcode五月每日一题 leetcode394

在这里插入图片描述
在这里插入图片描述
注意:
1.3[a]2[bc] 3[a2[c]] 这两个测试用例不好平衡,如果不是按string弹入栈而是用char的话,这两个用例就会很乱
2.当前面的数字超过10的时候,需要times = 10*times + s[i] - '0'; 先乘以10一下

class Solution {
public:
    string decodeString(string s) {

        stack<int> num;
        stack<string> str;

        int times = 0;

        string cur = "";

        for(int i = 0 ; i < s.size(); ++ i){
            if(s[i] >= '0' && s[i] <= '9')
                times = 10*times + s[i] - '0'; //遇到10以上的数字
            else if(s[i] == '['){
                num.push(times);
                str.push(cur); //不用char 按字符弹入
                times = 0;
                cur.clear();
            }else if( (s[i] >= 'a' && s[i] <= 'z')
                || (s[i] >= 'A' && s[i] <= 'Z') ) cur += s[i];
            else if(s[i] == ']'){
                int k = num.top(); num.pop();
                for(int j = 0 ; j < k ; ++ j)
                    str.top() += cur;
                cur = str.top();
                str.pop();

            }
        }

        return cur;

    }

};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章