通过字典的方式实现

  • 时间复杂度:O (n)
  • 空间复杂度:O (n)

    1. function isValid(s) {
    2. if (s.length % 2 === 1) {
    3. return false;
    4. }
    5. const stack = [];
    6. const map = new Map();
    7. map.set('(', ')');
    8. map.set('{', '}');
    9. map.set('[', ']');
    10. for (let i = 0; i < s.length; i++) {
    11. const item = s[i];
    12. if (map.has(item)) {
    13. stack.push(item);
    14. } else {
    15. const top = stack[stack.length - 1];
    16. if (map.get(top) === item) {
    17. stack.pop();
    18. } else {
    19. return false;
    20. }
    21. }
    22. }
    23. return stack.length === 0;
    24. }

上方代码只有一层 for 循环所以时间复杂度是 O (n)。同理空间复杂度是 O (n) 因为开辟的空间 stack 的长度是受 n 影响的,而 map 的长度是固定的只有3个,所以忽略不计。