Skip to content

Latest commit

 

History

History
97 lines (42 loc) · 1.36 KB

File metadata and controls

97 lines (42 loc) · 1.36 KB

20 有效的括号

// 题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

// 有效字符串需满足: 左括号必须用相同类型的右括号闭合。

// 左括号必须以正确的顺序闭合。

// 注意空字符串可被认为是有效字符串。

// 示例 1:

// 输入: "()"

// 输出: true

// 示例 2:

// 输入: "()[]{}"

// 输出: true

// 示例 3:

// 输入: "(]"

// 输出: false

// 示例 4:

// 输入: "([)]"

// 输出: false

// 示例 5:

// 输入: "{[]}"

// 输出: true

const leftToRight = {

  '(': ')',

  '[': ']',

  '{': '}'

};

  

const isValid = function (s) {

  if (!s) return true;

  

  const stack = [];

  

  for (const ch of s) {

    if (ch === '(' || ch === '{' || ch === '[') stack.push(leftToRight[ch]);

    else {

      if (stack.length === 0 || stack.pop() !== ch) return false;

    }

  }

  

  return stack.length === 0;

};
  • 如果当前字符是左括号('(', '[', '{'),将其对应的右括号(leftToRight[ch])压入栈中。
  • 如果当前字符是右括号,检查栈是否为空或栈顶元素是否与当前字符匹配:
    • 如果栈为空或栈顶元素不匹配,则返回 false
  • 如果栈为空,表示所有括号都匹配,返回 true,否则返回 false