括號配對問題JAVA實現
阿新 • • 發佈:2019-01-03
1. 括號匹配的四種可能性:
①左右括號配對次序不正確
②右括號多於左括號
③左括號多於右括號
④左右括號匹配正確
2. 演算法思想:
1.順序掃描算數表示式(表現為一個字串),當遇到三種類型的左括號時候讓該括號進棧;
2.當掃描到某一種型別的右括號時,比較當前棧頂元素是否與之匹配,若匹配,退棧繼續判斷;
3.若當前棧頂元素與當前掃描的括號不匹配,則左右括號配對次序不正確,匹配失敗,直接退出;
4.若字串當前為某種型別的右括號而堆疊已經空,則右括號多於左括號,匹配失敗,直接退出;
5.字串迴圈掃描結束時,若堆疊非空(即堆疊尚有某種型別的左括號),則說明左括號多於右括號,匹配失敗;
①左右括號配對次序不正確
②右括號多於左括號
③左括號多於右括號
④左右括號匹配正確
2. 演算法思想:
1.順序掃描算數表示式(表現為一個字串),當遇到三種類型的左括號時候讓該括號進棧;
2.當掃描到某一種型別的右括號時,比較當前棧頂元素是否與之匹配,若匹配,退棧繼續判斷;
3.若當前棧頂元素與當前掃描的括號不匹配,則左右括號配對次序不正確,匹配失敗,直接退出;
4.若字串當前為某種型別的右括號而堆疊已經空,則右括號多於左括號,匹配失敗,直接退出;
5.字串迴圈掃描結束時,若堆疊非空(即堆疊尚有某種型別的左括號),則說明左括號多於右括號,匹配失敗;
6.正常結束則括號匹配正確。
package N2; import java.util.*; public class Test2 { public static void main(String[] args) throws Exception { Scanner input = new Scanner(System.in); int num = input.nextInt(); String[] str = new String[num]; for (int i = 0; i < num; i++) { str[i] = input.next(); } for (int i = 0; i < num; i++) { if (matchInfo(str[i]) == true) System.out.println("YES\n"); else System.out.println("NO\n"); } } public static boolean matchInfo(String str) { Stack stack = new Stack(); char[] ca = str.toCharArray(); if(((Character) ca[0]) == '[' || ((Character) ca[0]) == '(') { for (int index = 0; index < str.length(); index++) { Character c1 = (Character) ca[index]; if((c1 == '(') || (c1 == '[')) { stack.push(c1); } else if (stack.empty()==true) { return false; } else if((c1 == ')') || (c1 == ']')) { if(((((Character) stack.peek()) == '(')&& (c1 == ')'))||((((Character) stack.peek()) == '[')&& (c1 == ']'))) { stack.pop(); } else return false; } } return stack.empty(); } else return false; } }