判断括号字符串是否有效

493 阅读1分钟

题目描述

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

方法一

通过入栈、出栈的方式,判断是否两两对应

function validStr (str) {
  // 长度为奇数直接返回
  if (str.length % 2 === 1) {
    return false;
  }
  const dic = {
    '(': ')',
    '{': '}',
    '[': ']'
  };
  const result = [];
  for (let i = 0; i < str.length; i++) {
    const cur = str[i];
    // 左括号入栈
    if (cur === '(' || cur === '{' || cur === '[') {
      result.push(cur);
    } else {
      // 左括号出栈
      const left = result.pop();
      // 右括号与左括号不配对
      if (dic[left] !== cur) {
        return false;
      }
    }
  }
  return !result.length;
}

方法二

通过遍历字符串,两个一次,判断是否两两对应

function validStr (str) {
  if (str.length % 2 === 1) {
    return false;
  }
  // 建立对应字典
  const dic = {
    '(': ')',
    '{': '}',
    '[': ']'
  };
  // 遍历字符串,一次遍历两个
  for (let i = 0; i < strArr.length; i += 2) {
    const left = str.charAt[i];
    const right = str.charAt[i + 1];
    if (right !== dic[left]) {
      return false;
    }
  }
  return true;
}