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,value
const 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不为空,说明有一些左括号没有闭合,返回false
if(stack.length !== 0) {
return false
}
return true
};