文章目录
题目描述:
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
简单分析:
题目描述非常简单,就是给定一个只含有括号的字符串,来判断左右括号是否匹配。我们知道,一个整体的括号分为左和右,要做到查找匹配,我们不妨可以将左括号进行存储,当遇到对应右括号时弹出比较。
这里分析一下出现 false 的一些情况:
1.字符串一开始就是 右 括号。
2.左括号多
3.右括号多
4.括号数量不匹配
代码实现:
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{
//若一开始就是右括号,栈内部为空
if(stack.empty()){
return false;
}
//这里判断左右括号是否匹配
char ch2 = stack.peek();
if(ch2 == '(' && ch == ')' || ch2 == '[' && ch == ']' || ch2 == '{' && ch == '}'){
stack.pop();
}else{
return false;
}
}
}
//遍历完后若栈不为空,就说明括号数量不匹配
if(!stack.empty()){
return false;
}
return true;
}
}