栈算法-编写职能重复函数smartRepeat

395 阅读1分钟

编写智能重复 函数实现:

  • 将3[abc]变为abcabcabc
  • 将3[2[a]2[b]]变为aabbaabbaabb

不用考虑输入的字符串非法的情况

  • 遍历每一个字符 如果是数字 压入stack1
  • 如果是 [ 给stack2压入一个空字符
  • 如果是 字符串 更新到 stack2 末尾的字符中
  • 如果是 ] 将stack1 弹栈 将stack2 弹栈 并处理两个值得到值 更新到最新的stack2 栈顶字符串中
let str = '2[3[a]4[b]]'
function smartRepeat (str){
   let stack1 = [];
  let stack2 = [''];
  let index = 0;
  let reg1 = /\[/
  let reg2 = /\]/
  let reg3 = /\d/
  let reg4 = /[a-zA-Z]/
  while (index < str.length) {
    let char = str[index]
    if (reg3.test(char)) {
      stack1.push(char)
    } else if (reg1.test(char)) {
      stack2.push('')
    }else if (reg4.test(char)) {
      stack2[stack2.length-1] += char
    }else if (reg2.test(char)) {
      let stack1pop = stack1.pop()
      let stack2pop = stack2.pop()
      let newStr = ''
      for (let i=0;i<stack1pop;i++) {
        newStr+=stack2pop
      }
      stack2[stack2.length-1] += newStr
    }
    index++
  }
  return stack2[0]
}