利用栈的数据结构特性实现{}是否闭合
栈的数据结构 的特点 先进后出
用javascript 实现栈结构的特性
class Stack {
constructor() {
this._items = []; // 储存数据
}
// 向栈内压入一个元素
push(item) {
this._items.push(item);
}
// 把栈顶元素弹出
pop() {
return this._items.pop();
}
// 返回栈顶元素
peek() {
return this._items[this._items.length - 1];
}
// 判断栈是否为空
isEmpty() {
return !this._items.length;
}
// 栈元素个数
size() {
return this._items.length;
}
// 清空栈
clear() {
this._items = [];
}
}
// 1 遍历数组中的每一项
// 2 判断 每次入栈的元素 是否是 “{” 如果是 就 入栈
// 3 如果下次入栈的是 } 就 删除 栈中的最后一项
// 4 遍历完成后 判断 stack.length 为0 就是闭合的 其中首次入栈的是 “}” 就直接 返回 false
function isBanlanced(str) {
let arr = [...str]; // 把字符串转化为数组
let stack = []; // 创建一个数组
for (let i = 0; i < arr.length; i++) {
if (arr[i] == "{") {
stack.push("{");
} else if (arr[i] == "}") {
if (stack.length === 0) {
return false;
}
stack.pop();
}
}
return stack.length === 0;
}
console.log(isBanlanced("{{{{{}}")); // false
console.log(isBanlanced("{}{}{{}}")); // true
console.log(isBanlanced("")); // true