PTA 1003

我要通过

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

分析

条件1 是基础 只能含有 P A T

条件2 是最先的判断条件   () PAT ()   ()可以是空,也可以是几个A

条件3 是在2的基础上进行递推   如果aPbTc是正确的,在此之前只有2能判断正确,所以第一步只能确定b=1A  满足2 PAT  然后再设置 a c 的值  又因为2 所以第一步a=c  再从这个基础上推aPbATca    和改变b的值   

PAT->PAAT           

APATA->APAATAA->APAAATAAA

AAPATAA->AAPAATAAAA

必须含有 P A T 三个字符&&P前面A的个数 * P T之间A的个数 = T后面A的个数&&PT之间必须有A

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();    //几个字符串待检查

        for (int i = 0; i < n; i++) {
            String s = sc.next();
            // 1.只有PAT这三种字符。2.xPATx是正确的
            //matches方法检查整个字符串是否符合给定的正则表达式模式
            //正则表达式  A* 0或多个A P出现一次 A+至少一个A T出现一次
            boolean isRight = s.matches("A*PA+TA*");
            // 3.如果 aPbTc 是正确的,那么 aPbATca 也是正确的。即a*b=c
            // 获取第一次出现P的索引下标; 就是P前面A的个数,如果P为2,则前面A的个数为2
            int a = s.indexOf("P");
            int index = s.indexOf("T");
            // 获取T前面A的个数  -1是减去P
            int b = index - a - 1;
            // 获取T后面A的个数 -2 减去P和T
            int c = s.length() - a - b - 2;
            System.out.println(isRight && (a * b == c) ? "YES" : "NO");
        }
    }
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值