01 對稱匹配問題(總元素必為偶數個)
阿新 • • 發佈:2020-12-08
不會題目的思路總結
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(); }