题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
//判断括号是否匹配问题
public boolean isValid(String s){
//1.创建一个栈
Stack<Character> stack = new Stack<>();
//2.循环遍历每个字符
for(int i = 0;i < s.length();i++){
char c = s.charAt(i);
//3.如果是左括号,就入栈
if(c == '(' || c == '{' || c == '['){
stack.push(c);
continue;
}
//4.如果是右括号,取出栈顶元素
if(stack.isEmpty()){
//不匹配的情况
return false;
}
char top = stack.pop();
//5.检查栈顶元素和当前元素是不是配对
if(top == '(' && c == ')'){
continue;
}
if(top == '{' && c == '}'){
continue;
}
if(top == '[' && c == ']'){
continue;
}
//如果代码走到这里,说明以上三种合法情况都不满足,就是非法字符
return false;
}
if(stack.isEmpty()){
return true;
}
return false;
}