题目:给定一个只包括'(',')','[',']','{','}'的字符串str,判断字符串是否有效。 有效字符串需满足:
- 左括号必须用相同类型的右括号闭合
- 左括号必须以正确的顺序闭合
主要理解栈的先进后出的概念
解题思路:
- 遇到(,[,{将对应需要消除的),],}放入栈中
- 遇到),],}不放入栈中并且合法的字符串必然可以和栈顶相等消除
数组的pop方法移除数组的最后一个元素,并返回该元素。
function isValid(str){
if(str.length() % 2 == 1){ // 如果括号的长度为奇数,肯定是不匹配的
return false
}
const stack = [];
for(let val of str){
if(val === '(') stack.push(')');
else if(val=== '[') stack.push(']');
else if(val === '{') stack.push('}');
else if(stack.length === 0 || val !== stack.pop())
return fasle;
}
return stack.length == 0
}
console.log(isValid('{[]()[}')) // false
简化版
funtion isValid(str){
const stack = []
map ={
"(":")",
"{":"}",
"[":"]",
};
for(const x of str){
if(x in map){
stack.push(x);
continue;
};
if(map[stack.pop()] !== x) return false;
}
return !stack.length
}