PAT 1003.我要通过!(20) java

1003. 我要通过!(20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“ 答案正确”的。

输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。

输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。

这题的条件是层层限定的,意味着即使第三个复杂限定下满足的条件,也要满足条件一,那么就一层层的写限定,先判断是否只包含P A T这三个字符;再判断PT前后和之间的字符是否都是A或者为空字符;再判断a*b==c这个关系是否成立,而且使判断更加的严谨。APT:在判断B时,加上是否为空。

package Mains;
public class no1003 {
    public static void main(String args[]) {
        Scanner scanner =new Scanner(System.in);
        int circlesum=new Integer(scanner.nextLine());
        while (circlesum>0) {
            String input = scanner.nextLine();
            int index = 0, p_index = 0, t_index = 0;
            p_index = input.indexOf("P");
            t_index = input.indexOf("T");
            if (input.contains("A")&&input.contains("P")&&input.contains("T")) {//判断是否只包含PAT
                if (p_index >= 0 && isAllA(input.substring(0, p_index))) {//a是否为空和全为A
                    if (isAllA(input.substring(p_index + 1, t_index))&&(t_index-1!=p_index)) {//b是否全为A且不为空
                        if (isAllA(input.substring(t_index + 1, input.length()))) {//c是否全为A或者为空
                            int a = p_index;
                            int b = t_index - p_index - 1;
                            int c = input.length() - t_index - 1;
                            if (a * b == c) {//是否满足条件三
                                p(true);
                                continue;
                            }

                        }
                    }
                }

            }
            circlesum++;
            p(false);

        }
        return;
    }
//    输出
    public static void p(boolean b){
        if(b){
            System.out.println("YES");
        }else {
            System.out.println("NO");
        }
    }
    //返回字符是否全为A或者空
    public static boolean isAllA(String s){
        int index=0;
        while (index<s.length()){
            if(!(s.substring(index,index+1).equals("A")||s.substring(index,index+1).equals(""))){
                return false;
            }
            index++;
        }
        return true;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值