有效的括号

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

有效字符串需满足:

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

示例 1:

输入:s = “()”
输出:true
示例 2:

输入:s = “()[]{}”
输出:true
示例 3:

输入:s = “(]”
输出:false
示例 4:

输入:s = “([)]”
输出:false
示例 5:

输入:s = “{[]}”
输出:true

提示:

  • 1<= s.length <= 104
  • s仅由括号 ‘()[]{}’ 组成
  1. /**
  2. * @param {string} s
  3. * @return {boolean}
  4. */
  5. var isValid = function(s) {
  6. // 判断左右括号的类型
  7. function ch(c) {
  8. if(c === '{' || c === '[' || c === '(') {
  9. return 'l'
  10. } else return 'r'
  11. }
  12. function to(quote) {
  13. if(quote === ')') return '('
  14. if(quote === ']') return '['
  15. if(quote === '}') return '{'
  16. }
  17. // 定义栈
  18. let stack = []
  19. // 判断字符串的长度,小于2,返回false
  20. if(s.length < 2) return false
  21. // 得到每一个括号
  22. for(let i= 0; i< s.length;i++) {
  23. let c = s[i]
  24. // 判断左右括号的类型
  25. let type = ch(c)
  26. // 左括号入栈,右括号出栈
  27. if(type === 'l') {
  28. stack.push(c)
  29. } else {
  30. // 特殊情况处理,第一个出现的右括号必须和相邻的左边括号是相反的一样的括号
  31. if(stack[stack.length -1] !== to(c)) {
  32. return false
  33. }
  34. stack.pop()
  35. }
  36. }
  37. if(stack.length !== 0) return false
  38. return true
  39. };