题目描述


注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

解题思路 ❤❤❤

  • 为什么用栈?

    • 括号内嵌套括号,需要从内向外生成与拼接字符串,这与栈的先入后出特性对应。
  • 辅助栈解法
    ① 遍历字符串 s 中每个字符 c;
    ② 当 c 为数字时,将数字字符转化为数字 multi,用于后续倍数计算;
    ③ 当 c 为字母时,在 res 尾部添加 c;
    ④ 当 c 为 [ 时,将当前 multi 和 res 入栈,并分别置空置 0:
    ⑤ 当 c 为 ] 时,stack 出栈,拼接字符串 res = last_res + cur_multi * res,其中:
    last_res是上个 [ 到当前 [ 的字符串,例如 “3[a2[c]]” 中的 a;
    cur_multi是当前 [ 到 ] 内字符串的重复倍数,例如 “3[a2[c]]” 中的 2。
    ⑥ 返回字符串 res。

JAVA思路(辅助栈)

class Solution {public String decodeString(String s) {int multi = 0;StringBuilder res = new StringBuilder();Stack<Integer> stack_multi = new Stack<>();Stack<String> stack_res = new Stack<>();for(Character c : s.toCharArray()) { // 注意这里的Character,以及toCharArray方法if(c >='0' && c<='9') multi = multi*10 + Integer.parseInt(c+""); // +""作用是转换为字符串,也可以写成c-'0'else if(c == '['){stack_multi.push(multi);stack_res.push(res.toString()); // 变成stringmulti = 0;res = new StringBuilder();}else if(c ==']'){StringBuilder tmp = new StringBuilder();int num = stack_multi.pop();for(int i=0 ; i<num ; i++) tmp.append(res);res = new StringBuilder(stack_res.pop() + tmp); //注意是stack_res}else res.append(c);}return res.toString();}
}

·394.字符串解码相关推荐

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

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

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

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

  3. LeetCode 394. 字符串解码(栈)

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

  4. leetcode 394.字符串解码 dfs

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

  5. leetcode系列-394. 字符串解码

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

  6. 【LeetCode笔记】394. 字符串解码(Java、递归、栈)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 开心!!独立思考字符串题,还AC了,成就感满满 XD 难点应该是在于嵌套括号,那么这里实际上还要考虑到一个类似于括号匹配的事情 谈到括号, ...

  7. leetcode 394. Decode String | 394. 字符串解码(用栈做表达式转换)

    题目 https://leetcode.com/problems/decode-string/ 题解 思路来源于中缀表达式,具体过程见下图草稿. 逻辑上不难,这题的槽点在 StringBuilder ...

  8. 394. 字符串解码

    方法 算法思想:辅助栈, 时间复杂度: 空间复杂度: 边界条件: 补充知识: class Solution { public String decodeString(String s) { Strin ...

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

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

最新文章

  1. 中国率先发布全球首份车路协同技术白皮书!清华百度联手,突破自动驾驶规模落地瓶颈...
  2. python软件怎么使用-Python快速入门—如何选择使用包管理工具?
  3. 尾递归与Continuation
  4. lecture 3 qkine- start with connections
  5. 一份详尽的IPC$入侵资料
  6. fanuc机器人四边形编程_中国工控 | FANUC 机器人码垛编程详解
  7. 03-19 分布式测试-Selenium Grid
  8. [学习笔记] Cordova+AmazeUI+React 做个通讯录 - 使用 SQLite
  9. 信息论与贝叶斯(二)
  10. Python基于迁移学习的交通信号识别实战【图像多分类任务】【实测准确度超过96.7%】
  11. Tab栏切换效果的制作
  12. 软件项目验收测试报告-软件项目验收流程
  13. Ubuntu 的ADSL设置(转)
  14. matlab模拟厄米高斯光束,拉盖尔高斯光束_厄米高斯光束MATLAB仿真.pdf
  15. 用Watir测试QTP的Demo程序Mercury Tours
  16. 机器学习笔记(五)逻辑回归 、决策边界、OvR、OvO
  17. Mysql---查询进阶(二)
  18. matlab如何使用slice,Matlab的slice命令
  19. 图示电路中的等效电阻rab_例求图示电路中ab两点间的等效电阻Rab.ppt
  20. 智慧协同新应用:FEv6.6,让组织更灵动/敏捷!

热门文章

  1. 【浏览器】浏览器的缓存机制
  2. JeeSite 框架学习笔记
  3. 从BAT代币抢购说说gas,gasprice
  4. DDS(数据分发服务)技术
  5. Kinsoku jikou desu新浪股票接口变动
  6. 【学习】 CSS总结
  7. 小学生职业体验计算机拆装,与“智能机器人”面对面——记嘉兴实验小学来嘉兴技师学院体验机器人职业体验中心...
  8. photoshop蒙版俗解:写给还在问蒙版是什么的新人
  9. 总结DAY689考研复习day13
  10. Rancher学习日记2