LeetCode_394. Decode String

題目描述:
在這裏插入圖片描述
思路:首先想到使用棧來存放數據,一個數字棧,一個字符棧。
1.當遇到數字的時候就統計數字(注意數字可能會超過一位數)
2.當遇到字符的時候就記錄下來
3.遇到’[‘時,就說明新的數字和字符串要開始了,需要將已經記錄好的數字和字符串放到對應的堆棧當中
4.遇到’]'時,說明已經完成了一次統計,這個時候數字棧頂元素就是當前記錄的字符串應該重複的次數。然後再將字符棧頂元素取出來,加到結果字符串中,並彈出字符棧和數字棧棧頂元素。

class Solution {
public:
    string decodeString(string s) {
        int num=0;//用於統計數字結果
        for(char c:s){
            if(isdigit(c))
                num=num*10+(c-'0');
            else if(isalpha(c)){
                res+=c;
            }else if(c=='['){
                chars.push(res);
                nums.push(num);
                res="";
                num=0;
            }else{
                string temp=res;//已經重複一次了
                for(int i=0;i<nums.top()-1;i++)//在這裏少重複一次
                    res+=temp;
                res=chars.top()+res;
                chars.pop();
                nums.pop();
            }
        }
        return res;
    }
private:
    stack<string> chars;
    stack<int> nums;
    string res;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章