碎碎念
啊啊啊啊昨天考完六级!!感觉要挂、、、写点算法手撕压压惊
题目


解答:栈
javascript
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const stack = []
const str = Array.from(s)
const left = new Set(['(', '[', '{'])
const right = new Set([')', ']', '}'])
while (str.length > 0) {
const cur = str[0]
str.shift()
if (left.has(cur)) {
stack.push(cur)
} else if (right.has(cur)) {
if (stack.length === 0) return false
const top = stack.pop()
const match = (top === '(' && cur === ')' || top === '[' && cur === ']' || top === '{' && cur === '}')
if (!match) {
return false
}
}
}
return stack.length === 0
};
写c++的时候顺手了while条件写成栈非空,但其实这里更关注处理字符串,最后再判断栈是不是空。
解答:栈+哈希表(优化,题解学的)
javascript
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
if(s.length % 2 === 1) return false
const mp = {'(': ')', '[': ']', '{': '}'}
const stack = []
for (const c of s) {
if (mp[c]) {
// 如果是左括号,对应的右括号入栈
stack.push(mp[c])
} else if (stack.length === 0 || stack.pop() !== c) {
// 如果是右括号,检查栈是否为空或者是不是预期的右括号
return false
}
}
return stack.length === 0
};
mpc能够判断是左括号是因为mp里的键都是左括号,如果c是右括号那么mpc是undefined,到if里判断等价于false。
(太神了居然想的是放入对应的右括号)