首页 > 其他 > 详细

394. 字符串解码

时间:2020-04-17 17:46:29      阅读:55      评论:0      收藏:0      [点我收藏+]

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例:

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

解法一:辅助栈法

class Solution:
    def decodeString(self, s: str) -> str:
        stack, res, multi = [], "", 0
        for c in s:
            if c == ‘[‘:
                stack.append([multi, res])
                res, multi = "", 0
            elif c == ‘]‘:
                cur_multi, last_res = stack.pop()
                res = last_res + cur_multi * res
            elif ‘0‘ <= c <= ‘9‘:
                multi = multi * 10 + int(c)            
            else:
                res += c
        return res

解法二:递归法

class Solution:
    def decodeString(self, s: str) -> str:
        def dfs(s, i):
            res, multi = "", 0
            while i < len(s):
                if ‘0‘ <= s[i] <= ‘9‘:
                    multi = multi * 10 + int(s[i])
                elif s[i] == ‘[‘:
                    i, tmp = dfs(s, i + 1)
                    res += multi * tmp
                    multi = 0
                elif s[i] == ‘]‘:
                    return i, res
                else:
                    res += s[i]
                i += 1
            return res
        return dfs(s,0)


作者:jyd
链接:https://leetcode-cn.com/problems/decode-string/solution/decode-string-fu-zhu-zhan-fa-di-gui-fa-by-jyd/
来源:力扣(LeetCode)

394. 字符串解码

原文:https://www.cnblogs.com/USTC-ZCC/p/12720981.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!