https://leetcode-cn.com/problems/valid-parentheses/
点击查看【bilibili】
题目
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例
输入: "()"输出: true
输入: "()[]{}"输出: true
输入: "(]"输出: false
输入: "([)]"输出: false
输入: "{[]}"输出: true
解答
1创建一个 HashMap,把括号配对放进去。
2.创建一个 stack(array)栈,for循环遍历字符串,
对于每一个字符,如果map里有这个key,那说明它是个左括号,
从map里取得相对应的右括号(为什么?),把它push进stack里。
否则的话,它就是右括号
需要pop出 stack里的第一个字符(也就是数组的最后一个字符)
然后看它是否等于当前的字符。如果不相符,则返回false
3.循环结束后如果stack不为空,说明还剩一些左括号没有被闭合,返回false.否则返回true
答案
/*** @param {string} s* @return {boolean}*/var isValid = function(s) {// 创建map,把括号匹配放进去,作为key,valueconst mappings = new Map()mappings.set('(',')');mappings.set('[',']');mappings.set('{','}');const stack = [] // 创建栈for(let i=0;i<s.length;i++) {// 如果map中有s[i],也就是有字符串中有左括号,把它对应的value放到stack中if(mappings.has(s[i])) {stack.push(mappings.get(s[i]))// 否则就是右括号,}else {// 如果pop出的字符不等于当前字符,说明右括号不匹配if(stack.pop() != s[i]) {return false}}}// 如果stack不为空,说明有一些左括号没有闭合,返回falseif(stack.length !== 0) {return false}return true};
