LeetCode 20 有效的括号
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([])”
输出:true
提示:
- 1 <= s.length <= 104
- s 仅由括号 ‘()[]{}’ 组成
解题思路
这一题需要括号一定成对匹配,这可以利用栈的特点来解决,栈的特点就是先进后出,这样就可以将对应的括号进行成对匹配。
首先如果字符串的字符数为奇数,那么括号不可能成对,直接返回false。
我们可以创建一个栈Stack
用于匹配字符,然后创建一个Map
用于字符成对关系维护,之后遍历字符串,有以下几种情况:
- 当前字符在
Map
中有对应的值,说明当前字符是起始字符,为(、 [、 {,我们将对应的结束字符放入到Stack
中 - 当前字符在
Map
中没有对应的值,说明当前字符是结束字符,为)、 ]、 },那么栈中应该存放有对应的起始字符,我们将栈中字符出栈,看出栈的字符是否和当前字符一样:- 如果一样,说明括号是成对的,进行下一次循环
- 如果不一样,说明括号不是成对的,那么直接返回
false
- 遍历完字符串后,看看栈中是否还有字符,如果还有字符,那么说明没有匹配完,返回
false
,如果栈中没有字符了,说明匹配结束,返回true
代码
var isValid = function(s) { |