今天第一次写leetcode解题,力求记录下最简洁易懂且效率最高的代码!喜欢就点个赞吧!比心~~?(✿◕‿◕✿)
题目要求
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
解题思路
做这道题使用了栈的知识,建立了一个map存储括号对,查找的时候十分方便。
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let map = {
')' : '(',
']' : '[',
'}' : '{'
}
let temp = [] //作为栈
for (var i = 0; i < s.length; i++) {
let index = s[i]
if (map[index] !== undefined) { // 找到了对应的左边括号
if (temp.length === 0) return false // 栈内没有左括号
if (temp[temp.length - 1] === map[index]) temp.pop() // 栈内有与之对应的左括号,左括号出栈
else return false // 栈内没有与之对应的左括号
}
else{
temp.push(index) // 右括号入栈
}
}
return temp.length === 0 // 返回栈是否为空,为空就是有效, 非空是无效
};
运行结果