给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

思路

  • 使用栈作为中介
  • 依次扫描,遇到左侧括号,入栈
  • 遇到右侧括号,做出栈操作,并检查出栈的之和当前的值是不是配对的。 如果不匹配,就返回false
  • 全部的字符扫描结束之后,如果栈不为空,返回false,否则返回true
  1. var stack = {
  2. list: [],
  3. in:function(s){this.list.push(s)},
  4. out:function(){
  5. // var curMaxIdx = this.list.length-1
  6. // var curVal = this.list[curMaxIdx]
  7. // this.list.length = Math.max(0,curMaxIdx)
  8. return this.list.pop()
  9. },
  10. isEmpty(){
  11. return this.list.length === 0
  12. }
  13. }
  14. var isValid = function(s) {
  15. const map={
  16. "}":"{",
  17. ")":"(",
  18. "]":"["
  19. }
  20. for(str of s) {
  21. var arr = Object.values(map)
  22. if(arr.includes(str)){
  23. // if(['(','[','{'].includes(str)) {
  24. stack.in(str)
  25. } else {
  26. if(map[str] !== stack.out()){
  27. // if(!isEqual(str,stack.out())){
  28. return false
  29. }
  30. }
  31. }
  32. return stack.isEmpty()
  33. };