前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 394. 字符串解码(中等)

Leetcode 394. 字符串解码(中等)

作者头像
我是胖虎啊
发布2022-06-27 18:03:04
2320
发布2022-06-27 18:03:04
举报
文章被收录于专栏:测试开发卷货测试开发卷货

题目名称

394. 字符串解码

题目链接

https://leetcode-cn.com/problems/decode-string/

题目思路

前言: 一开始拿到题时, 是先用最直接的想法做的.大致思路是: 遍历字符串, 每次遇到 [ 记录下位置,遇到 ]记录下位置.遍历完成后, 用切片的方式,获取字符串中括号之间的内容。实际做的过程中, 遇到了这个用例: s = "3[a2[c]]".然后迫不得已得写很多if 和 else, 最后把自己绕进去了. 最终放弃了这个思路,参考题解中大佬的思路.

正确思路: 1. 使用栈的思路, 遍历字符串,遇到非']'就入栈, 遇到就 '[' 就出栈.遇到数字时,先循环下尝试获取所有的数字,因为可能出现类似100[abc]这样的情况。

2.每次循环完并"解码"后, 将解码后的字符串继续添加到栈中。这样每次循环时,都会在这个栈中继续操作.有一点类似于"递归"

code for Python3

代码语言:javascript
复制
class Solution:
    def decodeString(self, s: str) -> str:
        stack = []
        for c in s:
            if c == ']':
                repeatStr = ''
                repeatCount = ''
                while stack and stack[-1] != '[':
                    repeatStr = stack.pop() + repeatStr
                stack.pop() # pop 掉 "["
                while stack and stack[-1].isdigit():
                    repeatCount = stack.pop() + repeatCount
                stack.append(repeatStr * int(repeatCount))
            else:
                stack.append(c)
        return "".join(stack)

复杂度分析

  • 时间复杂度: O(N)
  • 空间复杂度: O(1)

Tips

遇到类似括号的问题时, 可以想栈的操作来fix. 相似的题有20. 有效的括号

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发卷货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目名称
  • 题目链接
  • 题目思路
  • code for Python3
  • 复杂度分析
  • Tips
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档