394.字符串解码

难度:中等
题目描述:
394.字符串解码_第1张图片
思路总结:这题因为括号的嵌套,很容易想到用递归或者栈,但是实际写起来是比较复杂的,不好想出,需要多加思考。关键在于,如何保存前面已经生成(栈中没有左括号)的字符串的信息。另外,最后有个小技巧,mul*10的使用,巧妙的按字符读取n位整数。
题解一:

class Solution:
    def decodeString(self, s: str) -> str:
        #思路:这种类型的题,一种思路是栈,一种思路是递归。
        #本解法用的是栈,当遇到[时,我们将数字压入栈中,并开始用cur_str记录中括号里的字母,如遇到],就将之前的数字出栈并与当前的cur_str相乘。
        mul, cur_str = 0, ''
        stack = []
        for c in s:
            if c == '[':
                stack.append((mul, cur_str))
                mul, cur_str = 0, ''
            elif c == ']':
                n, pre = stack.pop()
                cur_str = pre + n * cur_str
            elif '0' <= c <= '9':
                mul = 10 * mul + int(c)
            else: #字母
                cur_str += c
        return cur_str       

题解一结果:
394.字符串解码_第2张图片

你可能感兴趣的:(朱滕威的面试之路)