JavaScript栈数据结构算法-大厂面试题

本文探讨JavaScript栈数据结构在大厂面试中的应用,通过具体题目解析解题思路,包括栈+for循环及栈+while循环+指针的实现方式。提醒初学者,遇到类似递归的问题,应考虑使用栈来解决。对于对象或数组结构的转换,适合用递归;而对于字符串形式的层级结构转换,栈可能是更好的选择。
摘要由CSDN通过智能技术生成

JavaScript栈数据结构算法-大厂面试题


题目:

试编写"智能重复" smartRepeat函数,实现:
- 将 3[abc] 变为abcabcabc
- 将 3[2[a]2[b]] 变为aabbaabbaabb
- 将2[10[a]3[b]2[1[c]5[d]]] 变为aaaaaaaaaabbbcdddddcdddddaaaaaaaaaabbbcdddddcddddd
- 以此类推......

不用考虑输入字符串是非法的情况,比如:
- 2[a3[b]] 是错误的,应该补应一个1,即2[1[a]3[b]]
- [abc] 是错误的,应该补一个1,即1[abc]

解题思路:

遍历每一个字符
- 利用识别[]结合栈创建层级关系
- 创建两个栈,一个保存数字,一个保存单词
- 如果字符是数字标识,则将数字压入数字栈
- 如果字符是 [ ,则将空字符串压单词栈
- 如果字符是字母,则将单词栈栈顶拼接上这个字母
- 如果字符是 ] ,则数字栈和单词栈都出栈,再整合数字和单词。如果栈中还有元素,将整合的字符串拼接到栈顶,没有则完成执行返回结果

代码实现:

  • 个人的思路实现(栈+for循环):

    function smartRepeat(templateStr) {
         
      let numStack = [] // 存放数字的栈
      let strStack = [] // 存放字符串的栈
      let isNum = false // 判断上一个字符是否为数字
    
      // 遍历模板字符串的每个字符
      for (let i = 0; i < templateStr.length; i++) {
         
        let char = templateStr[i] // 每一个字符
        // 如果该字符是数字
        if (/\d/.test(char)) {
         
          if (isNum) {
         
            // 判断前一项是否为数字,是的话结合前后项的数字
            numStack[numStack.length - 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值