1. 程式人生 > >PAT-乙級-Java-1003

PAT-乙級-Java-1003

1003 我要通過! (20 分)

答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。

得到“答案正確”的條件是:

  1. 字串中必須僅有 P、 A、 T這三種字元,不可以包含其它字元;
  2. 任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是空字串,或者是僅由字母 A 組成的字串;
  3. 如果 aPbTc 是正確的,那麼 aPbATca
     也是正確的,其中 a、 b、 c 均或者是空字串,或者是僅由字母 A 組成的字串。

現在就請你為 PAT 寫一個自動裁判程式,判定哪些字串是可以獲得“答案正確”的。

輸入格式:

每個測試輸入包含 1 個測試用例。第 1 行給出一個正整數 n (<10),是需要檢測的字串個數。接下來每個字串佔一行,字串長度不超過 100,且不包含空格。

輸出格式:

每個字串的檢測結果佔一行,如果該字串可以獲得“答案正確”,則輸出 YES,否則輸出 NO

輸入樣例:

8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA

輸出樣例:

YES
YES
YES
YES
NO
NO
NO
NO

Java程式碼實現:

import java.util.Scanner;


public class Main {

	public static void main(String[] args) {

		Scanner input = new Scanner(System.in);
		String length = input.nextLine();
		Integer len = Integer.parseInt(length);
		String [] str = new String [len];
		for(int i = 0;i<len;i++) {
			str[i] = input.nextLine();
		}
		
		for(int i = 0;i<len;i++){
			String result = business(str[i]);
			System.out.println(result);
		}
	}
	
	public static String business(String str) {
		String result = "";
		int p = -1;//標記P的索引
		int t = -2;//標記T的索引
		for(int i = 0;i<str.length();i++) {
			String charStr = str.substring(i, i+1);
			if(!(charStr.equals("A")) && !(charStr.equals("P")) && !(charStr.equals("T"))) {
				//含有非法字元
				result = "NO";
				return result;
			}
			else {
				//沒有非法字元
				
				if(charStr.equals("P")) {
					p = i;
				}
				if(charStr.equals("T")) {
					t = i;
				}
				
			}
			
		}
		if(str.contains("A") && str.contains("P") && str.contains("T")) {
			//p之前的A的個數:P
			//P,T之間的A的個數:t-p-1
			//T之後的A的個數:str.length()-1-t
			if(p*(t-p-1) == str.length()-1-t) {
				result = "YES";
			}else {
				result = "NO";
			}
		}else {
			result = "NO";
		}
		
		return result;
	}

}