20. 有效的括号|刷题打卡

简介: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:• 左括号必须用相同类型的右括号闭合。• 左括号必须以正确的顺序闭合。

一、题目描述:


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

有效字符串需满足:


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


示例 1:

输入:s = "()"

输出:true


示例 2:

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

输出:true


示例 3:

输入:s = "(]"

输出:false


提示:

1 <= s.length <= 10^4

s 仅由括号 '()[]{}' 组成


二、思路分析:


题目很简单,使用一个栈便可以解决。根据提示可知,字符串长度大于等于1,所以可以不考虑为0的情况。

  • 考虑'(','[','{'这三种情况,符合要求时,应该将其压栈;
  • 符合')','}',']'这三种情况时,应该判断此时的栈顶是否于闭合的三个字符相匹配。
  • 匹配。例如:栈顶为'(',当前字符为')'时,就应该将'('出栈
  • 不匹配。直接不满足要求

例子:


s = "{[]}"

网络异常,图片无法展示
|
最后,根据栈是否为空进行返回判断。如果不符合匹配条件可直接返回false。


三、AC 代码:



function isValid(s: string): boolean {
  let stack = [];
  stack[0] = s[0];
  for (let i = 1; i < s.length; i++) {
    switch (s[i]) {
      case "(":
        stack.push("(");
        break;
      case "[":
        stack.push("[");
        break;
      case "{":
        stack.push("{");
        break;
      case ")":
        if (stack[stack.length - 1] === "(") {
          stack.pop();
        } else {
          return false;
        }
        break;
      case "]":
        if (stack[stack.length - 1] === "[") {
          stack.pop();
        } else {
          return false;
        }
        break;
      case "}":
        if (stack[stack.length - 1] === "{") {
          stack.pop();
        } else {
          return false;
        }
        break;
    }
  }
  return stack.length ? false : true;
};


四、总结:


利用栈解决字符串匹配问题只是其中一种解决方法,还可以使用对象的key、value来解决。


作者:ClyingDeng

链接:https://juejin.cn/post/6947973790496194573

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
1月前
|
算法 C++
Leetcode第二十二题(括号生成)
这篇文章讨论了如何使用递归算法解决LeetCode第22题“括号生成”的问题,提供了两种C++的实现方法,目的是生成所有有效的括号组合。
17 0
Leetcode第二十二题(括号生成)
|
3月前
|
算法
LeetCode第22题括号生成
该文章介绍了 LeetCode 第 22 题括号生成的解法,通过回溯算法生成所有可能的括号组合,在递归过程中根据左右括号数量的条件进行剪枝,从而得到有效的括号组合。
LeetCode第22题括号生成
LeetCode:有效的括号
LeetCode:有效的括号
50 0
|
6月前
leetcode:20. 有效的括号
leetcode:20. 有效的括号
29 0
|
6月前
leetcode-22:括号生成
leetcode-22:括号生成
30 0
|
6月前
|
算法
面试题 08.09:括号
面试题 08.09:括号
27 0
Leetcode20.有效的括号
Leetcode20.有效的括号
29 0
|
C语言 C++
20.有效的括号(LeetCode)
20.有效的括号(LeetCode)
|
算法 程序员 编译器
力扣刷题-有效的括号
力扣刷题-有效的括号
|
机器学习/深度学习 算法 安全
LeetCode - #20 有效的括号
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode - #20 有效的括号