题目:力扣 – 20 – 有效括号
题目思想:
遍历整个字符串,利用栈把所有的左括号都存储起来,当遇到右括号的时候,所遇右括号形状和栈中左括号一致就进行弹栈,当遍历整个字符串后,栈为空证明所有左括号都有与之匹配的右括号,这种情况被称为有效括号,其他情况下均不是有效的字符串
无效括号存在以下三种情况:(只简单举一个例子)
①、左括号多:
②、右括号多:
③、左右括号不匹配:
代码解决:
情况分析:
①、匹配情况
②、左括号多
③、右括号多:
④、左右括号不匹配
class Solution {
public 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()){
return false;
}
if((s.charAt(i) == ')' && stack.peek() == '(')
|| (s.charAt(i) == '}' && stack.peek() == '{')
|| (s.charAt(i) == ']' && stack.peek() == '[')
){
//弹出匹配的左括号
stack.pop();
}else{
return false;
}
}
}
if(!stack.empty()){
return false;
}
return true;
}
}