leetcode - 判断有效的括号

116 阅读1分钟

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

有效字符串需满足:

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

示例 :

输入: s = "()"
输出: true

输入: s = "()[]{}"
输出: true

输入: s = "(]"
输出: false

输入: s = "([)]"
输出: false

输入: s = "{[]}"
输出: true
/**
 * @param {string} s
 * @return {boolean}
 */
//  栈内存:先进后出,后进先出
//  如果到最后为空数组则有效
var isValid = function(s) {
  const types = {
    '{': '}',
    '[': ']',
    '(': ')',
  }
  const pushKey = Object.keys(types);
  function findKeyByValue(value) {
    for(let key in types) {
      if(types[key] === value) {
        return key
      }
    }
    return '';
  }
  // 如果为空字符串直接返回 false
  if(!s) {
    return false;
  }
  // 如果给定字符串为奇数个直接返回 false
  if(s%2 === 1) {
    return false;
  }
  let length = s.length;
  let stack = [];
  for(let i = 0; i < length; i ++) {
    let ele = s[i];
    if(pushKey.includes(ele)) {
      stack.push(ele)
    } else {
      if(stack.pop() !== findKeyByValue(ele)) {
        return false;
      }
    }
 
  }
  return !stack.length
};

image.png