给定一个只包含 "(","{","[",")","}","]" 的字符串,判断字符串是否是有效字符串需要满足:
1、左括号必须用相同类型的有括号闭合
2、左括号必须以正确的方式闭合
注意:空字符串被认为是有效字符串
示例1:
输入:"()"
输出:true
示例2:
输入:"()[]{}"
输出:true
示例3:
输入:"(]"
输出:false
示例4:
输入:"([)]"
输出:false
示例5:
输入:"{([])}"
输出:true
答案:
var isValid = function(s){
let stack = [];
let obj = {
"(":")",
"{":"}",
"[":"]"
};
//取出字符串中的括号
for(let i=0;i<s.length;i++){
if(s[i]==="(" || s[i]==="{" || s[i]==="["){
//如果是左括号则入栈
stack.push(s[i]);
}else{
var key = stack.pop();
//如果栈顶元素不相同则返回 false
if(obj[key] !== s[i]) return false;
}
}
if(!stack.length) return true;
return false;
}
解析:
1、首先我们通过示例可以分析出什么样子的括号匹配是符合条件的:
1> 非嵌套情况:() {} []
2> 嵌套情况:{[()]}
2、然后我们将这些括号自右向左看做栈结构,右侧是栈顶,左侧是栈尾。
3、如果编译器中的括号是左括号,我们就入栈(左括号不用检查匹配),如果是右括号,就取出栈顶元素检查是否匹配
4、如果匹配则出栈,否则返回 false