1003. 我要通过!(20)

---恢复内容开始---

题目链接 

https://www.patest.cn/contests/pat-b-practise/1003

题目来源

PAT乙级真题及训练集

PAT (Basic Level) Practise (中文)

 

如果做题的人学过编译原理就好了。这题其实定义了一种字符串或者说是定义了一种“语言”。用编译中文法那一套东西就是

s-> XPATX

X-> $ | AX

XPATX-> XPAATXX

其中s是开始符,P,A,T是终止符。

用一句话描述就是P前面A的个数 × P和T中间A的个数 = T后面A的个数,而且P,A,T至少出现一次。

(java学的不好,代码就凑合着看吧)

import java.util.*;

public class Main{
    public static void main(String argu[]){
        
        Scanner read = new Scanner(System.in);
        int cont = 0;
        String in = "";
        String ans = "";
        if(read.hasNext()){
            cont = read.nextInt();
            read.nextLine();
        }
        //System.out.print(cont);
        int p = 0, a= 0, t = 0, flag = 1;
        while(cont >= 0){
            
            p = 0;
            a = 0;
            t = 0;
            flag = 1;
            in = read.nextLine();
            
            for(int i=0; i<in.length(); ++i){
                if(in.charAt(i) == 'P'){
                    p = i;
                }else if(in.charAt(i) == 'T'){
                    t = in.length() - i - 1;
                    a = i - p - 1;
                }else if(in.charAt(i) == 'A'){
                    
                }else{
                    ans = "NO";
                    flag = 0;
                    //System.out.print(in.charAt(i));
                    break;
                }
            }
            
            if(p * a == t && flag == 1 && a >= 1){
                ans = "YES";
            }else{
                ans = "NO";
            }
            cont --;
            System.out.println(ans);
            
        }
        
    }
}
 

 

 

 

 


---恢复内容结束---

posted @ 2017-03-18 16:27  _Ade  阅读(136)  评论(0编辑  收藏  举报