解码题。
编码规则直接看例子(编码后字符串->原字符串):
2[b] -> bb
3[a2[c]] -> 3[acc] -> accaccacc
2[a2[b]ef]xy ->2[abbef]xy->abbefabbefxy

根据上面的结构我们很容易想到用深搜算法:

先将']' 之前的信息(要重复的部分及重复次数)压到stack里,等到了']'再一个一个推出还原。思路非常清晰,但是实现起来并不简单。得注意细节及其处理方式,比如数字可能出现两位及以上; 并列关系[],[]和包含关系[[]]如何巧妙区分。另外发现大循环用while而不是for可能更方便一些。

下面是我在leetcode论坛上找到的比较好看的代码(44%):

public static String decodeString(String s) {Stack<Integer> count = new Stack<>();Stack<String> result = new Stack<>();//用Stack处理包含关系result.push("");int i = 0;while(i<s.length()){char a = s.charAt(i);if(a >= '0' && a <= '9'){int p1 = i;while(Character.isDigit(s.charAt(i+1))) i++;count.push(Integer.parseInt(s.substring(p1,i+1)));} else if (a == '[') {result.push("");//用初始化空字符串处理并列关系} else if(a == ']') {String temp = new String(result.pop());StringBuilder sb = new StringBuilder();int nloop = count.pop();for(int j = 0; j < nloop;j++)sb.append(temp);result.push(result.pop()+sb.toString());} else {result.push(result.pop()+a);}i++;}return result.pop();
}

当然也可以用递归算法,但我感觉比较难想,这种算法比较直接,面试的时候想到比较实际。

Ref:Java short and easy-understanding solution using stack

LeetCode 394: DecodeString (Java)相关推荐

  1. Leetcode怎么调试java代码,IDEA2020.1使用LeetCode插件运行并调试本地样例的方法详解...

    环境: idea2020.1 插件: LeetCode-editor 6.7 一.IDEA安装LeetCode插件 安装完成重启idea 打开插件 URL可以选择国服和世界服.LoginName和Pa ...

  2. leetcode 组合总和(Java)

    leetcode题目 组合总和 -- leetcode 39 题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target , 找出 candidates 中所有可以使数字和为 ...

  3. leetcode 相交链表 java

    相交链表 题干 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5] ...

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

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

  5. Leetcode怎么调试java代码,在Clion上调试LeetCode代码

    在Clion上调试LeetCode代码 在leetcode上做题调试起来总有些不方便,所以查阅了一些资料后,按以下配置,自我感觉效率还行,分享给大家.祝大家刷题愉快.并附上自己整理的leetcode4 ...

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

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

  7. leetcode算法题解(Java版)-16-动态规划(单词包含问题)

    摘要: 碰到二叉树的问题,差不多就是深搜.广搜,递归那方面想想了,当然如果要考虑一下空间.时间,还需要进行剪枝和压缩处理.这题比较简单:判断两个树是否相等,可以递归的判断子树是否相等,最后找到边界条件 ...

  8. Leetcode怎么调试java代码,LeetCode–正则表达式匹配

    深入浅出node. js+node学习指南书 208.6元 (需用券) 去购买 > LeetCode–正则表达式匹配 博客说明文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总, ...

  9. Leetcode刷题java之3. 无重复字符的最长子串

    执行结果: 通过 显示详情 执行用时 :13 ms, 在所有 Java 提交中击败了49.96% 的用户 内存消耗 :37.5 MB, 在所有 Java 提交中击败了36.47%的用户 题目: 给定一 ...

最新文章

  1. linux系统 长久记录所有用户所有操作记录
  2. 物联网设备僵尸网络趋势分析
  3. Waymo高管指责媒体夸大自动驾驶的商业化前景
  4. 修改ESP8266-01S MicroPython下载固件,看是否能够烧录程序
  5. Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据...
  6. python调用系统命令_Python如何调用外部系统命令
  7. 【实例分割_SOLOv2】SOLOv2:Dynamic,Faster and Stronger
  8. 前后端分离必备的接口规范,十分接地气
  9. 0031-如何在CDH启用Kerberos的情况下安装及使用Sentry(一)
  10. oracle汉字转换成拼音首字母和五笔首字母
  11. SpringBoot 接入支付宝 SDK(支付宝支付你会吗?)
  12. 计算机系统结构层次划分,网络的体系结构及其划分所遵循的原则
  13. mysql随机日期_mysql插入随机日期
  14. 网页炫酷特效拿来即可用(看板娘鼠标点击炫酷登录页面樱花特效生日祝福彩虹屁)
  15. 企业电子招投标采购系统源码之电子招标采购是管理复杂供应链和多层供应商的高效方式
  16. oracle11gwin8,win8_oracle11g_64位连接32位PLSQL_Developer
  17. 一文解决C语言运算符的优先性与结合性——Think like a computer
  18. Opencv读取多张图片
  19. python 出现报错 pm2 �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���
  20. python打印神兽佛祖和美女 | Buddha Bless, No Bug !

热门文章

  1. unity 打开项目路径无效_unity3d建立的文件有中文路径,现在新建了项目打不开了...
  2. 构建基于流程的多维度企业管理体系
  3. linux查看网卡型号
  4. 核能版“水变油”登上Nature!谷歌7000万押注,MIT参与,被评争风加水汽车
  5. 刚刚,无人驾驶公司Roadstar,发公告把联合创始人开除了
  6. 全球最贵红绿灯之谜得解,原来是百度Apollo的B面
  7. 机器人水下赌场争霸战!中国团队创造历史,在美国登顶世界第一
  8. TensorFlow团队成员说:深度学习的未来,在单片机的身上
  9. 腾讯AI让二子,柯洁还是输了
  10. 贾老板大秀未来机器人之舞,场面有点不可描述(动图+视频)