291 阅读1分钟

后进先出

题目1、判断字符串中的{([ 是否成对并且正确 例如:(1212[3434])sdsd{2323} 正确 (1212[3434]{)sdsd2323} 错误

解题思路:遍历字符串,遇到左边 {([ 进栈,遇到右])} 出栈

代码

 
class Stack {
  constructor() {
    this.list = [];
    this.top_val = null;
    this.tail_val = null;
    this.tail_pos =  -1;
  }
  pop() { // 出栈
    let val = this.list[this.tail_pos];
    this.list.splice(this.tail_pos, 1) 
    this.tail_pos = this.list.length - 1;
    this.tail_val = this.list[this.tail_pos];
    return val;
  }
  push(val) { // 压栈
    this.list.splice(this.tail_pos + 1, 0, val)
    this.tail_pos = this.list.length - 1;
    this.tail_val = val;
  }
}
var obj = {
  "{":"}",
  "[":"]",
  "(":")"
};
let right_arr = ["}", "]", ")"];
function verify(str) {
  let stack = new Stack();
  let arr = str.split('');
  for (let i = 0; i < arr.length; i++ ) {
    let val = arr[i];
    if(obj[val]) { // 左边的 压栈
      stack.push(val);
      continue;
    }
    if(~right_arr.indexOf(val)) { // 右边的 
      if(obj[stack.tail_val] == val) { // 出栈
        stack.pop();
        continue;
      }
      return false;
    }
  }
  if(stack.tail_pos > 0) {
    return false;
  }
  return true;
}

var str = "{(12)}{[]}";
console.log(verify(str));

第一次写,心情忐忑。。。。。。。。。。。。