文章目录

  • 题目描述
  • 题解
    • 递归
    • 利用栈

题目描述


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

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

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

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

示例 1:

输入:s = “3[a]2[bc]”
输出:“aaabcbc”
示例 2:

输入:s = “3[a2[c]]”
输出:“accaccacc”
示例 3:

输入:s = “2[abc]3[cd]ef”
输出:“abcabccdcdcdef”
示例 4:

输入:s = “abc3[cd]xyz”
输出:“abccdcdcdxyz”

提示:

1 <= s.length <= 30
s 由小写英文字母、数字和方括号 ‘[]’ 组成
s 保证是一个 有效 的输入。
s 中所有整数的取值范围为 [1, 300]

题解


递归

需要注意,由于int& x,x是需要不断往后走的,而不同的栈帧用到同一个变量,可以使用static,成员变量,传引用的方式。

  • 遇到左括号就递归下一层
  • 每一个栈帧维护一个temp子串,当遇到]将结果返回给上一层
  • 遇到正常字符就入,num需要提前保存,表示该字符串出现的次数。
  • 最后返回第一层栈帧的时候,就可以获得最终的结果,并且返回。
class Solution {public:string dfs(const string s, int& x){string temp;for (x; x < s.size(); ++x){if (s[x] >= '0' && s[x] <= '9'){int num = s[x] - '0';while (x + 1 < s.size() && s[x + 1] >= '0' && s[x + 1] <= '9'){num = num * 10 + s[x + 1] - '0';++x;}++x;//[++x;//字符string str = dfs(s, x);for (int i = 0; i < num; ++i){temp += str;}}else if (s[x] == ']'){return temp;}else{temp += s[x];}}return temp;}string decodeString(string s) {int x = 0;return dfs(s, x);}
};

利用栈

四种情况分析:

  • 为整数,就更新整数
  • [就将先前的res保存,数字保存
  • ]将保存的结果拿出进行计算。栈保存的是之前的结果,res维护的是当前的结果。
  • 为正常字符,维护res。
class Solution {public:stack<int> numst;stack<string> strst;string decodeString(string s) {int num = 0;string res;for(int i = 0;i < s.size() ;++i){if(s[i] >= '0' && s[i] <= '9'){num = num * 10 + s[i] - '0';}else if(s[i] == '['){numst.push(num);num = 0;strst.push(res);res = "";}else if(s[i] ==']'){int times = numst.top();numst.pop();for(int i = 0;i < times; ++ i){strst.top() += res; }res = strst.top();strst.pop();}else{res += s[i];}}return res;}
};

end

  • 喜欢就收藏
  • 认同就点赞
  • 支持就关注
  • 疑问就评论

【每日一题】字符串解码相关推荐

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

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

  2. 每日一题(字符串拆分)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  3. 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十七天 题目链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/ 题解汇总:https:// ...

  4. 【解题报告】Leecode 859. 亲密字符串——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十四天 题目链接:https://leetcode-cn.com/problems/buddy-strings/ 题解汇总:https://zhanglong.blog.c ...

  5. 【JAVA】交错字符串——力扣每日一题(六)(2020.07.18)

    目录 题目:97. 交错字符串 思路 如果你从本文中学习到丝毫知识,那么请您点点关注.点赞.评论和收藏 大家好,我是爱做梦的鱼,我是东北大学大数据实验班大三的小菜鸡,非常渴望优秀,羡慕优秀的人,个人博 ...

  6. LeetCode每日一题——1758. 生成交替二进制字符串的最少操作数

    LeetCode每日一题系列 题目:1758. 生成交替二进制字符串的最少操作数 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个仅由字符 '0' 和 '1' ...

  7. leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树

    leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...

  8. LeetCode每日一题——1684. 统计一致字符串的数目

    LeetCode每日一题系列 题目:1684. 统计一致字符串的数目 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个由不同字符组成的字符串 allowed ...

  9. 每日一题——反转字符串中的单词

    每日一题 反转字符串中的单词 题目链接 思路(进阶) 我们首先不考虑太多限制因素,先看如何实现字符串中单词的反转 举个例子:我们要反转字符串"the sky is blue"中的单 ...

最新文章

  1. linux 复制文件 中文,linux中cp命令如何复制文件
  2. 非线编辑软件 linux,Flowblade 2.0 发布,非线性开源Linux视频编辑器
  3. extjs 获取id的值_Extjs combox获取显示值和ID值
  4. Firefox下去掉密码自动填充
  5. 【GWT系列】 Speed Tracer 入门
  6. Linux 删除除某个文件之外的所有文件
  7. Java中线程的创建有两种方式
  8. 【翻译】FisheyeMultiNet: Real-time Multi-task Learning Architecture for Surround-view Automated Parking
  9. 解决docker-compose: command not found
  10. Sublime Text:安装插件、卸载插件
  11. 博科Brocade系列光纤交换机报价 程鹏宇 13829750520
  12. 中山技术学院计算机学院,计算机科学与技术学院
  13. 特写:美国B2C网站惨淡经营
  14. 面试官:说说你对keep-alive的理解是什么?怎么缓存当前的组件?缓存后怎么更新?
  15. 聊一聊ThreadLocal内存泄漏的问题
  16. python填充图像为方形
  17. RPC 实战与核心原理分析
  18. MIT 6.S081 Lab4 traps
  19. 使用C#语言编写记事本程序
  20. python openpyxl引用excel公式函数

热门文章

  1. 学习有限元需了解的知识点
  2. 有限元刚度矩阵的一维变带宽存储用C++实现(三)
  3. 简历石沉大海?程序员简历到底该怎么写?
  4. git提交用户名与当前用户名不止一致(或者邮箱)
  5. 什么是swift闭包?
  6. 产品学习--产品经理三大文档--BRD、MRD、PRD
  7. 状态机控制移位寄存器multisim仿真过程中出现的状态变量和状态转移条件不匹配的问题
  8. 【5.20】用 canvas 绘制一朵玫瑰
  9. 动手实现天气预报App(一)——数据、工具类和碎片布局准备
  10. python编程基础张勇答案_2020智慧职教云课堂Python编程基础答案完整满分课后作业答案...