题目
思路
用栈对可能的情况进行选择
**当数据为左括号时压入栈中 当为右括号时与栈顶元素比较 看是否为匹配的括号 **
当字符串遍历结束且栈中没有元素时 表示括号是匹配状态
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;
//如果此时栈为空 则说明
//1.右括号比左括号多 例如:((())))
//2.右括号在左括号前 例如:)(
//无论是哪种情况括号都不匹配
}else{
//拿出栈顶的元素
char temp = stack.peek();
//判断括号是否匹配
if(ch == ']' && temp == '[' ||
ch == '}' && temp == '{' ||
ch == ')' && temp == '('){
stack.pop();
//括号匹配成功 弹出栈顶的左括号
}else{
return false;
}
}
}
}
if(!stack.empty()){
//如果遍历结束栈里还有元素 说明左括号多于右括号
return false;
}
//没有以上情况 说明为括号匹配
return true;
}
}