leetcode-394. 字符串解码

作者: 秸秆混凝烧结工程师 | 来源:发表于2021-06-01 18:18 被阅读0次

    题目:

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

    编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

    你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

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

    示例 1:

    输入:s = "3[a]2[bc]"

    输出:"aaabcbc"

    示例 2:

    输入:s = "3[a2[c]]"

    输出:"accaccacc"

    示例 3:

    输入:s = "2[abc]3[cd]ef"

    输出:"abcabccdcdcdef"

    示例 4:

    输入:s = "abc3[cd]xyz"

    输出:"abccdcdcdxyz"

    Related Topics 栈 深度优先搜索

    👍 774 👎 0

    leetcode submit region begin(Prohibit modification and deletion)

    class Solution:
    def decodeString(self, s: str) -> str:

    leetcode submit region end(Prohibit modification and deletion)

    AC答案:
    解析: 1.遇到 右括号之前直接将说有元素入栈,2.y遇到左括号之前将所有元素出栈 3. 将左括号出栈
    4.将栈中的其余元素出栈 5.将步骤4中的数值 转数字 就是重复次数

    class Solution:
    def decodeString(self, s: str) -> str:
    l_s = list(s)
    stack = []
    for word in l_s:
    if word != ']':
    stack.append(word)
    else:
    #////1.字符列表
    tem = []
    while stack[-1] != '[' and stack:
    tem.append(stack.pop())
    tem = tem[::-1]
    #然后弹出'['
    stack.pop() ///2
    #数字列表 ///3
    nums = []
    while len(stack) >= 1:
    if '0' <= stack[-1] <= '9':
    nums.append(stack.pop())
    else:
    break
    nums = nums[:: - 1]
    result = 0 ///5
    for num in nums:
    result = result * 10 + int(num)
    ll = [] ////6
    while result:
    ll += tem
    result -= 1
    stack += ll # ///7
    return ''.join(stack)

    相关文章

      网友评论

        本文标题:leetcode-394. 字符串解码

        本文链接:https://www.haomeiwen.com/subject/nyhgsltx.html