1. 程式人生 > >PAT-1003 我要通過! (20 分)

PAT-1003 我要通過! (20 分)

1003 我要通過! (20 分)

“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。
得到“答案正確”的條件是:
字串中必須僅有 P、 A、 T這三種字元,不可以包含其它字元;
任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是空字串,或者是僅由字母 A 組成的字串;
如果 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

public static void main(String[] args) throws IOException {
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String string=reader.readLine();
        int n=Integer.parseInt(string);
        for (int i = 0; i <n; i++) {
            string=reader.readLine
(); if(judge(string)) System.out.println("YES"); else System.out.println("NO"); } } public static boolean judge(String string){ char[]c=string.toCharArray(); if(string.matches("PA+T"))return true; //計算P前的A的個數 int i = 0; for
(; i <c.length; i++) { if(c[i]=='A'); else break; } //記錄中間的 int j =i+1; for (; j<c.length; j++) { if(c[j]=='A'); else break; } j=j-i-1; if(i>0){ if(string.matches("A{"+i+"}PAT"+"A{"+i+"}")) return true; if(string.matches("A{"+i+"}PA{"+j+"}TA{"+j*i+"}")) return true; } return false; }