LeetCode之--有效的括号

108 阅读1分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。

前言

最近参加了2022年三月份的蓝桥杯比赛,所以计划学习算法和数据结构相关知识,但是平时都是学习不持续,所以希望借此机会来学习此知识点。因为我是在校大三学生,所以后续的算法相关代码都是使用js语言来进行完成。本文更新的是leetcode算法题之--有效的括号。

题目

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

有效字符串需满足:

image.png

示例

image.png

image.png

image.png

image.png

image.png

题解

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
 const stack = [];
  for (let i = 0; i < s.length; i++) {
    let c = s[i];
    switch (c) {
      case '(':
        stack.push(')');
        break;
      case '[':
        stack.push(']');
        break;
      case '{':
        stack.push('}');
        break;
      default:
        if (c !== stack.pop()) {
          return false;
        }
    }
  }
  return stack.length === 0;
};

分析

将左括号看作待匹配的元素,将右括号看作去和左括号匹配的元素。 扫描字符串:

  • 遇到左括号,就入栈待匹配。
  • 遇到右括号,试图与栈顶的左括号进行匹配:
  • 如果栈空了,说明有右括号是多余的。
  • 如果匹配,则栈顶带匹配的做括号得的匹配,出栈。
  • 如果不匹配,则栈顶的左括号的右边是一个和它不匹配的右括号,说明这个字符串是无效的。
  • 如果字符串扫描结束后,栈不为空,则有左括号是多余的 利用swithch -case语句,然后栈来进行循环输出。