“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
一、题目描述
- 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
二、思路分析
- 这道题考察对
栈的理解,栈是后入先出的数据结构- 所以我们遇到
({[的时候就将他们入栈 - 当遇到其他情况,就将
栈顶元素弹出,并进行判断 - 如果
匹配括号成功,则返回true,否则返回false
- 所以我们遇到
三、AC 代码:
class Solution {
public boolean isValid(String s) {
//边界条件,长度为零不需要匹配直接返回结果
if(s.length() == 0){
return true;
}
//创建一个栈用来存放`([{`
Stack<Character>stack = new Stack<>();
//循环获取字符串并进行判断
for(char ch:s.toCharArray()){
//如果是({[就压入栈中
if(ch=='('||ch=='{'||ch=='['){
stack.push(ch);
}else{
//如果栈空了,无法匹配返回false
if(stack.isEmpty()){
return false;
}else{
//弹出栈顶元素
char temp = stack.pop();
//匹配则返回true,继续下一轮匹配,否则返回false
if(temp=='['){
if(ch!=']'){
return false;
}
}else if(temp =='('){
if(ch!=')'){
return false;
}
}else{
if(ch!='}'){
return false;
}
}
}
}
}
//最后栈应该是空的才返回true
return stack.isEmpty()?true:false;
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:-
利用栈
后进先出的特性 -
如果是左括号就
进栈,反之取栈顶元素检查匹配度 -
要注意
判断栈是否为空
-