[LeetCode] 394. Decode String @ python

本文详细解析了一种字符串解码算法,通过使用两个栈分别存储数字和字母,实现了字符串的正确解码。文章提供了具体的解题思路和Python代码实现,展示了如何处理多位数字和特殊字符的复杂情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.题目:
字符串解码.
Examples:

s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".

二.解题思路:
这种题类似于计算器计算题型.我们通常在解题时需要设计两个栈来储存数字和字母.需要注意的点:
(1)数字可能是多位的;
(2)遇到"]“时将字母栈中上一个”["之后的字母要全部排出来,然后数字栈排出一个元素得到新的字符串再放入到字母栈中;
代码如下:

class Solution(object):
    def decodeString(self, s):
        """
        :type s: str
        :rtype: str
        """
        nums,char = [],[]
        i = 0
        length = len(s)
        while i < length:
            if s[i].isdigit():
                num = 0
                while i<length and s[i].isdigit():
                    num = 10*num + int(s[i])
                    i +=1
                nums.append(num)
            elif s[i] == "[" or s[i].isalpha():
                char.append(s[i])
                i +=1
            else:
                char1 = char.pop()
                tmp = []
                while char1 != "[":
                    tmp.append(char1)
                    char1 = char.pop()
                num = nums.pop()
                new_char = num * "".join(tmp[::-1])
                char.append(new_char)
                i +=1
        return "".join(char)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值