思路

使用栈 然后遍历
如果当前元素为左边括号,将其压入栈中
如果为右边分类讨论
1)如果栈不为空且为对应左半边的括号,则取出栈顶元素,继续循环
2)若此时栈为空,则直接返回false
3)若不为对应的左半边括号,反之返回false

代码

  1. /**
  2. * @param {string} s
  3. * @return {boolean}
  4. *
  5. */
  6. var isValid = function(s) {
  7. let stack = [];
  8. const mapper = {
  9. "{":'}',
  10. '(':')',
  11. '[':']'
  12. }
  13. for(let i in s) {
  14. const v = s[i];
  15. if(['{','(','['].indexOf(v) > -1) {
  16. stack.push(v)
  17. }else {
  18. const peak = stack.pop();
  19. if(v !== mapper[peak]) {
  20. return false
  21. }
  22. }
  23. }
  24. if (stack.length > 0) return false
  25. return true
  26. };