给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

  1. //使用栈的思路来解
  2. var isValid = function(s) {
  3. //首先括号是成双成对的,如果 s.length 不是 2 的倍数,则不是有效的括号
  4. const n = s.length;
  5. if (n % 2 === 1) {
  6. return false;
  7. }
  8. //定义hash表来关联有效括号
  9. const pairs = new Map([
  10. [')', '('],
  11. [']', '['],
  12. ['}', '{']
  13. ]);
  14. //定义栈结构
  15. const stk = [];
  16. //遍历字符串 ch char 字符
  17. for (let ch of s){
  18. //如果 hash 表中有该键值对的话
  19. if (pairs.has(ch)) {
  20. //如果栈为空,或者栈的最后一个数据不等于对应的括号关系,则返回 false
  21. if (!stk.length || stk[stk.length - 1] !== pairs.get(ch)) {
  22. return false;
  23. }
  24. //遇到对应关系的括号后则出栈
  25. stk.pop();
  26. }
  27. else {
  28. //没有对应关系的括号则入栈
  29. stk.push(ch);
  30. }
  31. };
  32. return !stk.length;
  33. };