题目:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
思路:例如 ({}) '(' 与 ')' 匹配 '{' 与 '}' 匹配 可以看成 21 12 这就可以用栈解决
设置一个栈stk, 遇到左符号时入栈(push) 遇到右符号时出栈(pop)
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
if(s%2===1) return false
const pairs = new Map([
[')','('],
[']','['],
['}','{']
])
const stk=[]
for(let ch of s){
if(pairs.has(ch)){
if(!stk.length||stk[stk.length-1]!==pairs.get(ch)) return false //条件
stk.pop() //出栈
}else{
stk.push(ch)
}
}
return !stk.length
};
这里有几点注意事项:
- 字符串s 必须是偶数个
- 必须是左符号开始 右符号结束