经典括号匹配问题——你真的明白了吗?

简介: 经典括号匹配问题——你真的明白了吗?

前言:

括号匹配问题是经典中的经典,是学习栈的经典例题,今天就再解剖一下这一经典例题,且看下文!

利用LeetCode的经典题目,详细揭开括号匹配问题的神秘面纱。

题目链接:有效的括号

题目描述:

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

有效字符串需满足:

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

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

每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入: “()”

输出: true

示例 2:

输入: “()[]{}”

输出: true

示例 3:

输入: “(]”

输出: false

算法思想及解析:

注意这一段代码:

括号一定是匹配的,要不然是会出错的。

还有别忘记再判断栈是否为空了

完整代码实现:

1. class Solution {
2. public boolean isValid(String s) {
3. 
4.             Stack<Character>stack=new Stack<>();
5. 
6. for(int i=0;i<s.length();i++){
7. char ch=s.charAt(i);
8. if(ch=='('||ch=='['||ch=='{'){//左括号入栈
9.                     stack.push(ch);
10.                 }else{          //右括号匹配则出栈,不匹配就是false
11. 
12. if(!stack.empty()&&stack.peek().equals(stackOf(ch))){
13. 
14.                     stack.pop();
15. 
16.                 }else{
17. return false;
18.                 }
19. 
20. 
21.                 }
22. 
23.             }
24. 
25. if(stack.empty()){
26. return true;
27.             }else{
28. return false;
29.             }
30.     }
31. 
32. public char stackOf(char ch){
33. if(ch==')')return '(';
34. if(ch==']')return '[';
35. return '{';
36. 
37.     }
38. }

代码调试无误:


相关文章
|
6月前
|
自然语言处理 编译器
编译原理复习五:属性文法与三地址码的生成(附题目与答案 超详细)
编译原理复习五:属性文法与三地址码的生成(附题目与答案 超详细)
453 0
|
5月前
|
人工智能 算法 BI
一篇文章讲明白KMP算法(俗称看毛片算法)
一篇文章讲明白KMP算法(俗称看毛片算法)
53 0
|
5月前
|
算法 C语言 计算机视觉
【数据结构与算法 经典例题】括号匹配问题
【数据结构与算法 经典例题】括号匹配问题
|
6月前
|
缓存 算法 C语言
数据结构与算法⑧(第三章_上)栈的概念和实现(力扣:20. 有效的括号)
数据结构与算法⑧(第三章_上)栈的概念和实现(力扣:20. 有效的括号)
29 0
|
程序员 C语言
初阶函数经典例题(2)
初阶函数经典例题(2)
|
6月前
|
算法 搜索推荐 程序员
C语言第三十三练—— KMP算法和扩展 KMP算法
C语言第三十三练—— KMP算法和扩展 KMP算法
64 0
|
6月前
编译原理复习六:依赖图、注释语法树上节点的求值讲解(附题目与答案 超详细)
编译原理复习六:依赖图、注释语法树上节点的求值讲解(附题目与答案 超详细)
262 0
|
缓存 算法 C语言
【数据结构与算法篇】栈与队列(详解)附加Leetcode经典笔试题
【数据结构与算法篇】栈与队列(详解)附加Leetcode经典笔试题
58 0
初阶函数递归经典例题(1)
初阶函数递归经典例题(1)
|
算法 Windows
C 递归 详解(通俗易懂)
C 数据结构与算法入门——递归 内容分享。
76 0