给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
解题方法
解题思路:
(1)有效括号字符串的长度,一定是偶数
(2)右括号前面,必须是相对应的左括号才能抵消
(3)右括号前面,不是对应的左括号,那么该字符串一定不是有效的括号
方法一
varisValid=function(s){let res=[];if(s.length%2){returnfalse;}for(let i of s){switch(i){case"{":case"[":case"(":
res.push(i);break;case"}":if(res.pop()!=="{"){returnfalse;}break;case"]":if(res.pop()!=="["){returnfalse;}break;case")":if(res.pop()!=="("){returnfalse;}break;}}return!res.length;};
方法二
varisValid=function(s){
s=s.split('');if(s.length%2){returnfalse;}let map=newMap([[')','('],[']','['],['}','{']]);let res=[];for(let i of s){if(map.get(i)){if(res[res.length-1]!==map.get(i)){returnfalse;}else{
res.pop();}}else{
res.push(i);}}return!res.length;};