有效的括号是为了检测括号类型是否一致,例如:() , [] , {}。
首先我们要了解什么是栈,栈的原理是什么:
1.栈(stack
)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。
2.向一个栈插入新元素又称作进栈、入栈。把一个新元素添加入栈,使其成为新的栈顶,把栈顶元素删除,相邻的元素便会成为栈顶。简单的理解为,就是栈的过程就是先进后出。
这次算法题就是用JavaScript来模拟栈的过程。简单通过push,pop完成。
const isValue = (s) => {
let stack = []; //定义一个新数组
if (s.length % 2 != 0) return false; //第一步是判断传递的参数是否是奇数,是就返回false,不做接下来的操作
for (let i = 0; i < s.length; i++) { //循环字符串
const c = s[i]
if (c == '(' || c == '{' || c == '[') { //当c为左类型的括号时存储
stack.push(c);
} else {
const t = stack[stack.length - 1]; //此时是当c为右类型括号时,t为stack上一次存储的括号
console.log(t);
console.log(c);
if (
(t == '(' && c == ')') || //判断如果t为左类型,c为右类型括号,匹配上
(t == '{' && c == '}') ||
(t == '[' && c == ']')
) {
stack.pop() //就从数组中删除 ,删到数组为0
} else {
return false //如果有一项不匹配,返回false
}
}
}
return stack.length === 0 //Boolean
}
console.log(isValue("()")); //true
console.log(isValue("({}")); //false
console.log(isValue("({}){}")); //true
console.log(isValue("({}{)}")); //false
谢谢!