一、题目要求
二、思路
1、输入一个字符串,遍历当前字符串,如果是左括号,那么入栈。
2、当前的字符串中的字符是右括号,那么和当前的栈顶元素的括号进行匹配,如果匹配成功,那么直接把栈顶出栈。
3、当i下标对应的字符和栈顶的字符不能匹配时,是右括号的匹配错误。
4、遍历完成后,栈中没有任何元素,则它是匹配的。若字符串遍历完成后,栈中仍然有字符,则说明字符串中左括号更多。
5、若i遍历,栈为空,则右括号多。
三、代码
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
//如果是左括号入栈
if(s.charAt(i) == '(' || s.charAt(i) == '['|| s.charAt(i) == '{') {
stack.push(s.charAt(i));
}else {
//右括号
if(stack.empty()) {
System.out.println("右括号多!");
return false;
}else {
//拿到栈顶元素进行比较 看是否匹配 匹配出栈
if((stack.peek()=='('&&s.charAt(i)==')')||(stack.peek()=='['&&s.charAt(i)==']')||(stack.peek()=='{'&&s.charAt(i)=='}')){
stack.pop();
}else{
System.out.println("右括号匹配错误");
return false;
}
}
}
}
//判断栈是空的还是非空的
if(stack.empty()){
return true;
}else{
return false;
}
}