leetcode 394 字符串解码

字符串解码

在这里插入图片描述

高刷题(栈)

class Solution {
    
    
public:
    string decodeString(string s) {
    
    
        string res;
        stack <int> nums;
        stack <string> strs;
        int num = 0;
   
        for(int i = 0; i < s.size(); i++)
        {
    
    
            if(s[i] >= '0' && s[i] <= '9')
            {
    
    
                num = num * 10 + s[i] - '0';
            }
            else if(s[i] >= 'a' && s[i] <= 'z')
            {
    
    
                res += s[i];
            }
            else if(s[i] == '[') //将‘[’前的数字压入nums栈内, 字母字符串压入strs栈内
            {
    
    
                nums.push(num);
                num = 0;
                strs.push(res); 
                res.clear();
            }
            else //遇到‘]’时,操作与之相配的‘[’之间的字符,使用分配律
            {
    
    
                int times = nums.top();
                nums.pop();
                for(int j = 0; j < times; ++ j)
                    strs.top() += res;
                res = strs.top(); //之后若还是字母,就会直接加到res之后,因为它们是同一级的运算
                                  //若是左括号,res会被压入strs栈,作为上一层的运算
                strs.pop();
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44814825/article/details/129775590