leetcode 394. 字符串解码

解码字符串LeetCode题解
本文详细解析了LeetCode上的一道经典题目——解码字符串。通过使用栈模拟的方法,文章逐步阐述了解题思路,并提供了完整的Python代码实现。该题目要求根据编码规则k[encoded_string],即方括号内的字符串重复k次,来还原出原始的未编码字符串。
  1. 题目链接 https://leetcode-cn.com/problems/decode-string/comments/

  2. 题目描述

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

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

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

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

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

    1. 栈模拟。遍历字符串,假设当前字符为s,s为字母或是'['则入栈。为数字,需要将整个数集齐再入栈。若为']'出栈累加字符直到遇到’]‘,出栈数字与累加的字符相乘再入栈
  4. 代码

    1. python
      class Solution:
          def decodeString(self, s: str) -> str:
              st = []
              for i in s:
                  if i == ']':
                      tmp = st.pop()
                      while st[-1] != '[':
                          tmp = st.pop() + tmp
                      st.pop()
                      st.append(int(st.pop()) * tmp)
      
                  elif i.isdigit():
                      st.append(str(int(st.pop()) * 10 + int(i)) if st and st[-1].isdigit() else i)
                  else:
                      st.append(i)
              return ''.join(st)

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值