1. 程式人生 > >括號配對問題JAVA實現

括號配對問題JAVA實現

1. 括號匹配的四種可能性:
①左右括號配對次序不正確
②右括號多於左括號
③左括號多於右括號
④左右括號匹配正確

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;
	    }
	
}