輸入: 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;
}
