不會題目的思路總結
01 對稱匹配問題(總元素必為偶數個)
思想:
- 當讀取遇到左邊部分(對稱軸左邊),就把相應的右邊部分內容壓堆疊進去,
- 當讀取遇到右邊部分,則進行彈堆疊進行相等比較處理(與右邊部分內容)
- 當讀取完時所有元素時,堆疊中無元素時,則代表所求的東西是對稱的符合匹配規律的,
- 若中途堆疊為慷訓者彈堆疊比較的結果為false,那么東西必然是不符合對稱的
注意:以"[]"(對稱圖形),則左邊部分內容(對稱軸左邊)為"[",右邊部分內容(對稱軸右邊)為"]"
實體:b站基礎面試題-----括號匹配問題(對稱的)
public class Solution01 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入要判斷的字串");
System.out.println(isPairs(scanner.next()));
} //利用堆疊先進后出的原理,括號匹配也是后面進去的先匹配)
public static boolean isPairs(String string) {
if (string.length() % 2 != 0) {
//奇數必然不匹配
return false;
}
//利用堆疊先進后出的原理,每遇到左括號,就壓進去(push)對應的右括號,然后遇到右括號就進行彈堆疊
// 若所有的彈堆疊都和對應的右括號的一致,就回傳true,否則回傳false
Stack<Character> stack = new Stack();//定義一個堆疊,利用泛型限定壓堆疊的內容
char[] chars = string.toCharArray();//為壓堆疊做準備
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '{') {
stack.push('}');
} else if (chars[i] == '[') {
stack.push(']');
} else if (chars[i] == '(')
stack.push(')');
else if (stack.isEmpty() || chars[i] != stack.pop()) {
//堆疊空該次代表著遇到的就是結束符號
//如果彈出的堆疊與遇到的右括號不相等,也是回傳false;
return false;
}
}
//如果遍歷完所有的字符數字元素,都未回傳false,那么堆疊必然為空
return stack.isEmpty();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/231768.html
標籤:其他
