后进先出
题目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));
第一次写,心情忐忑。。。。。。。。。。。。