判断有效括号

270 阅读1分钟

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

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

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

示例 1:

输入: "()" 输出: true

示例 2:

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

示例 3:

输入: "(]" 输出: false

示例 4:

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

示例 5:

输入: "{[]}" 输出: true

解题思路:

1.对于匹配类型的问题,一般采用盏的方式解决

2.在stack数组中 push 左括号,下一个字符应当为左括号或同类型的右括号才能满足条件

3.满足条件后将该字符在数组中移除

4.出现一条不满足条件的则 返回 false

5.所有数据遍历完成后数组应当为空

image.png

以上情况皆可满足。

以第三种情况为例。

ScreenRecorderProject13.gif

代码实现:

const f = function (s) {
  const stack = []
  for (let index = 0; index < s.length; index++) {
    const char = s[index]
    switch (char) {
      case '(':
        stack.push(')')
        break;
      case '[':
        stack.push(']')
        break;
      case '{':
        stack.push('}')
        break;
      default:
        const lastCharInStack = stack.pop()
        if (char !== lastCharInStack) {
          return false
        }
        break;
    }
  }
  return stack.length === 0
}

const str = '{([])}'
console.log(f(str))

github