Skip to content

Latest commit

 

History

History
70 lines (41 loc) · 1.16 KB

394._decode_string.md

File metadata and controls

70 lines (41 loc) · 1.16 KB

###394. Decode String

题目:

https://leetcode.com/problems/decode-string/

难度:

Medium

思路:

感觉像用栈做运算。

s = "3[a2[c]]"

⬇️

s = 3 *( a + 2 * ( c ) )

遇到非右括号全部入栈,碰到右括号出栈直到左括号,这个就算运算符2 → op2 然后检查,直到stack空掉或者碰到下一个非数字,这个就算运算符1 → op1

算出op1 和 op2 之后把这个res继续入栈。然后接着处理

代码不是很优美

class Solution(object):
    def decodeString(self, s):
        """
        :type s: str
        :rtype: str
        """

        s = list(s)
        stack = []

        while s:
        	char = s.pop(0)
        	if char != ']':
        		stack.append(char)
        	else:
        		op1, op2 = '',''
        		popChar = stack.pop()
        		while popChar != '[':
        			op2 = popChar + op2
        			popChar = stack.pop()

        		while stack and stack[-1] in ['0','1','2','3','4','5','6','7','8','9']:
        			popChar = stack.pop()
        			op1 = popChar + op1

        		res = int(op1) * op2

        		for char in res:
        			stack.append(char)

        return ''.join(stack)