网站首页 > 技术文章 正文
习题
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: 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"
算法思路
本题的第一个难点在于嵌套括号,与栈的先进后出相互对应,所以我们可以使用栈来进行辅助
本题的第二个难点在于数字和字母都可能是连续的,所以我们可以使用两个栈,分别来保存数字和字母
定义当前字符串 str,当前数字num,数字栈numStack,字母栈strStack
遍历s中的每个字母,假设定义为current
- current 为数字时,num = num * 10 + current
- current 为字母时,str = str + current
- current 为 [ 时,将字符串和数字推入栈中,并重置它们
- current 为 ] 时,拼接字符串 str = last_str + mul * str,其中:
- last_str 是上个 [ 到当前 [ 的字符串,例如 "3[a2[c]]" 中的 a
- mul 是当前 [ 到 ] 内字符串的重复倍数,例如 "3[a2[c]]" 中的 2
复杂度分析
- 时间复杂度 O(N),一次遍历 s
- 空间复杂度 O(N)
代码
/**
* @param {string} s
* @return {string}
*/
var decodeString = function(s) {
var numStack = [],
strStack = [],
num = 0,
str = "";
for (var i = 0; i < s.length; i++) {
var current = s[i];
if (current == '[') {
numStack.push(num);
strStack.push(str);
num = 0;
str = "";
} else if (current == ']') {
str = strStack.pop() + str.repeat(numStack.pop());
} else if (isNaN(current)) { // 字母
str += current;
} else { // 数字
num = num * 10 + Number(current);
}
}
return str;
};
- 上一篇: 当下最火的前端面试题,回溯算法来了
- 下一篇: 前端学数据结构与算法:理解递归及拿力扣链表题目练手
猜你喜欢
- 2025-06-18 盘点机器人常用的几大主流SLAM算法
- 2025-06-18 蚂蚁金服软件测试工程师一面面试题(附答案)建议收藏
- 2025-06-18 142道最新的Linux面试题及解析!代码清晰直接套用
- 2025-06-18 字节跳动的算法面试题是什么难度?
- 2025-06-18 史上最全的字节跳动 Java 面试题集锦,高级 Java 工程师面试技术
- 2024-10-04 前端面试题(最近) 前端面试题2021及答案
- 2024-10-04 前端基础知识汇总(一) 前端知识梳理
- 2024-10-04 面试笔试算法题 面试算法题是手写吗
- 2024-10-04 2W字!梳理50道经典计算机网络面试题(收藏版)
- 2024-10-04 数组遍历:JavaScript算法题的解题利器
你 发表评论:
欢迎- 533℃Oracle分析函数之Lag和Lead()使用
- 531℃几个Oracle空值处理函数 oracle处理null值的函数
- 529℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 521℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 515℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 505℃【数据统计分析】详解Oracle分组函数之CUBE
- 485℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 483℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端密码加密 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)