作者:渴望力量的土狗
博客主页:渴望力量的土狗的博客主页
专栏:手把手带你刷牛客
工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网
目录
前言:
括号匹配问题是经典中的经典,是学习栈的经典例题,今天就再解剖一下这一经典例题,且看下文!
利用LeetCode的经典题目,详细揭开括号匹配问题的神秘面纱。
题目链接:有效的括号
题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
算法思想及解析:
注意这一段代码:
括号一定是匹配的,要不然是会出错的。
还有别忘记再判断栈是否为空了
完整代码实现:
class Solution {
public boolean isValid(String s) {
Stack<Character>stack=new Stack<>();
for(int i=0;i<s.length();i++){
char ch=s.charAt(i);
if(ch=='('||ch=='['||ch=='{'){//左括号入栈
stack.push(ch);
}else{ //右括号匹配则出栈,不匹配就是false
if(!stack.empty()&&stack.peek().equals(stackOf(ch))){
stack.pop();
}else{
return false;
}
}
}
if(stack.empty()){
return true;
}else{
return false;
}
}
public char stackOf(char ch){
if(ch==')')return '(';
if(ch==']')return '[';
return '{';
}
}
代码调试无误: