给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
let stack = []
let leftToRight = {
"{":"}",
"[":"]",
"(":")"
}
for (let i = 0; i<s.length; i++) {
let char = s[i]
console.log('i', i)
if (char === '[' || char === '{' || char === '(') {
stack.push(leftToRight[char])
} else {
if (stack.pop() !== char) {
return false
}
}
}
return !stack.length
}
我尝试了接近两个小时都没做出来,最后看了答案才发现,最简单的逻辑就是入栈和出栈的符号 一定是相等的;这样才能确保符号的成双成对的;思路很重要