575. 字符串解码

575. 字符串解码

中文English

给出一个表达式 s,此表达式包括数字,字母以及方括号。在方括号前的数字表示方括号内容的重复次数(括号内的内容可以是字符串或另一个表达式),请将这个表达式展开成一个字符串。

样例

样例1

输入: S = abc3[a]
输出: "abcaaa"

样例2

输入: S = 3[2[ad]3[pf]]xyz
输出: "adadpfpfpfadadpfpfpfadadpfpfpfxyz"

挑战

你可以不通过递归的方式完成展开吗?

注意事项

数字只能出现在“[]”前面。

输入测试数据 (每行一个参数)如何理解测试数据?

 栈

class Solution:
    """
    @param s: an expression includes numbers, letters and brackets
    @return: a string
    """
    def expressionExpand(self, ss):
        # write your code here
        stack = []
        #分四种,一个是[,一个是],一个是数字,一个是字符
        
        #如果没有遇]则append到stack里面
        for s in ss:
            if s != ']':
                stack.append(s)
                continue
            
            temp_array = []
            if s == ']':
                #根据最后一个元素判断是否到终点
                while stack[-1] != '[':
                    temp_array.append(stack.pop())
                
                #此时已经到[
                stack.pop()
                
                repeat = ''
                while stack and stack[-1].isdigit():
                    repeat += stack.pop()
                
                temp_array = temp_array[:: -1]*int(repeat[:: -1])
                stack.extend(temp_array)
        
        return ''.join(stack)

 

posted @ 2020-07-13 01:15  风不再来  阅读(171)  评论(0编辑  收藏  举报