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

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

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

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

解法一:辅助栈法
本题难点在于括号内嵌套括号,需要从内向外生成与拼接字符串,这与栈的先入后出特性对应。

算法流程:

构建辅助栈 stack, 遍历字符串 s 中每个字符 c;
当 c 为数字时,将数字字符转化为数字 multi,用于后续倍数计算;
当 c 为字母时,在 res 尾部添加 c;
当 c 为 [ 时,将当前 multi 和 res 入栈,并分别置空置 00:
记录此 [ 前的临时结果 res 至栈,用于发现对应 ] 后的拼接操作;
记录此 [ 前的倍数 multi 至栈,用于发现对应 ] 后,获取 multi × [...] 字符串。
进入到新 [ 后,res 和 multi 重新记录。
当 c 为 ] 时,stack 出栈,拼接字符串 res = last_res + cur_multi * res,其中:
last_res是上个 [ 到当前 [ 的字符串,例如 "3[a2[c]]" 中的 a;
cur_multi是当前 [ 到 ] 内字符串的重复倍数,例如 "3[a2[c]]" 中的 2。
返回字符串 res。


复杂度分析:

时间复杂度 O(N)O(N),一次遍历 s;
空间复杂度 O(N)O(N),辅助栈在极端情况下需要线性空间,例如 2[2[2[a]]]。

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

2021-09-09394. 字符串解码 栈相关推荐

  1. [Leedcode][JAVA][第394题][字符串解码][栈][类型转换]

    [问题描述][中等] 给定一个经过编码的字符串,返回它解码后的字符串.编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k ...

  2. 【LeetCode】【HOT】394. 字符串解码(栈)

    [LeetCode][HOT]394. 字符串解码 文章目录 [LeetCode][HOT]394. 字符串解码 package hot;import java.util.LinkedList;pub ...

  3. 字符串解码(猿辅导笔试题数箱子)

    可以申请两个栈,一个存放数字一个存放字符.本题我们直接申请一个栈,数据类型设定为pair<int,string>.遍历原字符串时,遇到数字则计算保存到num中,遇到左括号 [ 则入栈,入栈 ...

  4. 【每日一题】字符串解码

    文章目录 题目描述 题解 递归 利用栈 题目描述 394. 字符串解码 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 enc ...

  5. 2021.09青少年软件编程(Python)等级考试试卷(三级)

    2021.09青少年软件编程(Python)等级考试试卷(三级) 一.单选题(共25题,每题2分,共50分) 1.使用map函数可以实现列表数据元素类型的转换,而无需通过循环.则将列表L=['1',' ...

  6. LeetCode-笔记-394. 字符串解码

    LeetCode-笔记-394. 字符串解码 394. 字符串解码 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encod ...

  7. 橘子CPS联盟操作手册2021.09

    橘子CPS联盟操作手册2021.09 目录 橘子CPS联盟操作手册2021.09 橘子CPS联盟是干嘛的 橘子CPS基本操作流程 PC端操作 1.注册 2.登陆 3.渠道管理 4.分享网站 5.分享网 ...

  8. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  9. hihocoder #1103 : Colorful Lecture Note微软苏州校招笔试 1月10日(字符串处理+栈)

    #1103 : Colorful Lecture Note 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is writing an algorit ...

  10. PHP对Json字符串解码返回NULL的一般解决方案

    php对json字符串解码使用json_decode()函数,第一个参数传字符串,第二个参数若为true,返回array:若为false,返回object.如果返回NULL,说明报错,输出json_l ...

最新文章

  1. 从理论到实践,全方位认识HTTP/2
  2. android使用 注解框架,Android实践 | 注解框架ButterKnife基本使用
  3. python编写程序输入整数n求n_Python入门习题----N=ABXBA
  4. windows server 2012将计算机图标添加到桌面(图文教程)(转)
  5. JDK8下载 (jdk-8u271-windows-x64和jdk-8u271-linux-x64.tar)
  6. dnf最新地图编号2020_《DNF》2020搬砖地图有哪些
  7. 成功解决 XXX--1.0-SNAPSHOT.jar中没有主清单属性
  8. Linux系列八-type、alias与history
  9. 魅力主播曹启泰《上班这点事》经典语录
  10. 公立计算机大学排名,全国公办软件工程大学排名
  11. Android系统启动流程完整分析(一)
  12. DDD - 概述 - (一)
  13. STM32CubeMX入门使用一
  14. Winsock中accept函数获取到的ip地址一直为204.204.204.204或0xcccccccc的解决方案
  15. android自定义侧滑菜单代码,原生Android 侧滑菜单实践(部分)
  16. 2021朔城区一中高考成绩查询,青春有志逐梦远行—朔城区一中2021届高三毕业典礼暨高考壮行大会...
  17. 【一起入门MachineLearning】中科院机器学习-期末题库-【计算题5+单选题19,20+简答题21】
  18. 如何用Heidisql本地连接阿里云RDS数据库
  19. [USB 启动盘_1]-支持 BIOS/UEFI 启动的个人常用必备 PE 系统启动盘制作工具 —— 电脑店装机维护工具套装以及全网最详细的 U 盘启动方式详解
  20. QMenu 设置菜单图标 生成菜单树

热门文章

  1. 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证....
  2. webpack的详细使用
  3. JavaScript_高程三_01
  4. 3D slider 项目经验
  5. mysql Unknown storage engine 'InnoDB'解决
  6. Silverlight 5的新功能预测
  7. eclipse的控制台显示有问题,关闭Limit console output
  8. wordpress让百度分享支持https
  9. mysql global_MySQL设置global变量和session变量的两种方法详解
  10. matlab调用python数值精度改变吗_Matlab如何调用python脚本-matlab调用python数值精度改变吗 - PS下...