目录
一、题目
二、思路
1.有三种考虑的方向:
(1)(()左括号多
(2)())右括号多
(3)([)]左右括号不匹配
2.使用栈来实现本题
(1)如果遇到左括号就入栈
(2)如果遇到右括号,就比较栈顶元素和当前的右括号是否匹配,如果匹配则出栈
(3)因为栈当中存储的左括号,当遍历完整个字符串,栈还是不为空的,则左括号多,否则右括号多
三、代码实现
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()){
System.out.println("右括号多!");
return false;
}
char top = stack.peek();
if(top == '(' && ch == ')' || top == '[' && ch == ']' || top == '{' && ch == '}'){
stack.pop();
}else{
System.out.println("左右括号不匹配!");
return false;
}
}
}
if(!stack.empty()){
System.out.println("左括号多!");
return false;
}
return true;
}
}