问题:一个字符串只包括‘(’、‘{’、‘[’、‘)’、‘}’、‘]'问括号是否能匹配上,能返回true,不能返回false.
分析:
分情况
①左括号多 false;
②右括号多 false;
③左右括号不匹配 false
④左右括号匹配 true
代码:
//左右括号匹配问题
// 利用栈
public static 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.isEmpty()){//遇到右括号而且栈为空,说明右括号多
return false;
}else{
int ch1=stack.peek();
if(ch1=='('&&ch==')'||ch1=='['&&ch==']'||ch1=='{'&&ch=='}'){
stack.pop();
}else{ //对应的左右括号不匹配
return false;
}
}
}
}
if(!stack.isEmpty()){//左括号比右括号多
return false;
}
return true;
}