栈是一种后入先出(LIFO,last-in-first-out)的数据结构。
假设有一个算术表达式
let expression = '2.3 + 23 / 12 + (3.14159 * 0.24';
利用后入先出的这个特点,对字符串(算术表达式)进行遍历,如果遇到左括号"(",就把字符"("压入栈
for (let i = 0; i < length; i++) {
if (expression[i] === '(') {
stack.push('(');
}
}
如果遇到右括号")",就把栈顶的字符弹出栈
if (expression[i] === ')') {
if (stack.length > 0) {
stack.pop();
}
}
有两种情况可以判断表达式的括号是否匹配
- 字符串遍历结束后,栈的长度不为零,说明表达式缺少了右括号
- 字符串遍历过程中,如果在做弹出栈的动作时,发现栈的长度已经为零,说明表达式缺少左括号;
完整代码如下:
function check(expression) {
let length = expression.length,
stack = [];
for (let i = 0; i < length; i++) {
if (expression[i] === '(') {
stack.push('(');
} else if (expression[i] === ')') {
if (stack.length > 0) {
stack.pop();
} else {
return false;
}
}
}
return (stack.length <= 0) ? true : false;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。