输入: String str = “()[]{”;
输出:false
输入: String str = “()[]{}”;
输出:true
ps:
使用 java.util 包下的 Stack 类,模拟左括号进栈,遇到右括号就弹栈对比。
面试dd时忘记了Stack类,打算用数组模拟栈,想了半天栈顶指针++ – 的问题,然后容易紧张就放弃思考了。感觉有必要重拾力扣和数据结构了。。
用Stack类就会省事不少。。
public static boolean isValid(String str){
boolean isValid = false;
// char[] chars = str.toCharArray();
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++){
if (str.charAt(i) == '(' || str.charAt(i) == '[' || str.charAt(i) == '{'){
stack.push(str.charAt(i));
}
if (str.charAt(i) == ')' || str.charAt(i) == ']' || str.charAt(i) == '}'){
//如果栈空,且字符未遍历完,则表明不匹配
if (stack.isEmpty()){
return false;
}
if (str.charAt(i) == ')' && stack.peek() == '(' ||
str.charAt(i) == ']' && stack.peek() == '[' ||
str.charAt(i) == '}' && stack.peek() == '{'
){
stack.pop();
}
}
}
//遍历完所有字符,若栈不空,说明左括号过多,不匹配
if (stack.isEmpty()){
return true;
}
return false;
}