通过字典的方式实现
- 时间复杂度:O (n)
空间复杂度:O (n)
function isValid(s) {
if (s.length % 2 === 1) {
return false;
}
const stack = [];
const map = new Map();
map.set('(', ')');
map.set('{', '}');
map.set('[', ']');
for (let i = 0; i < s.length; i++) {
const item = s[i];
if (map.has(item)) {
stack.push(item);
} else {
const top = stack[stack.length - 1];
if (map.get(top) === item) {
stack.pop();
} else {
return false;
}
}
}
return stack.length === 0;
}
上方代码只有一层 for 循环所以时间复杂度是 O (n)。同理空间复杂度是 O (n) 因为开辟的空间 stack 的长度是受 n 影响的,而 map 的长度是固定的只有3个,所以忽略不计。