20 有效的括号
/// 97.08% 68.03%
var isValid = function(s) {
let stack = [];
for(i of s){
if (i === '(' || i === '{' || i === '['){
stack.push(i)
}else{
if (stack.length > 0){
let top = stack.pop()
if (!top) return false
if ((top === '(' && i === ')') || (top === '[' && i === ']') || (top === '{' && i === '}')){
}else{
return false
}
}else{
return false
}
}
}
return stack.length === 0
};
因为每个元素都会且仅会进入栈一次,每次时间复杂度是O(1),因此总的时间复杂度是O(n)。空间复杂度也是O(n)。还有一个结果让人疑惑的解法。
/// 99.85% 63.52%
var isValid = function(s) {
let stack = [];
let m = new Map()
m.set(')', '(')
m.set(']', '[')
m.set('}', '{')
for(i of s){
if (!m.has(i)){
stack.push(i)
}else{
if (stack.length > 0 && stack.pop() === m.get(i)){
}else{
return false
}
}
}
return stack.length === 0
};
这个让我疑惑的地方在于多使用了一个Map而且主要改动的代码也只是括号的配对的那个if语句,居然速度快了足足8ms。