1003 我要通过! (20分) 正则表达式 (java)(题解)

思路:推出足够多正确的字符串找规律,   

1. PAT  ->>>  PAAT  ->>> PAAAT

2. APATA   ->>>   APAATAA    ->>>   APAAAPAAA

3.AAPATAA  ->>>   AAPAATAAAA  ->>>   AAPAAATAAAAAA

需要注意的是,要用初始正确的去推导。

发现了一个规律 ,P左边A的数量  c1  ,P T 中间A的数量 c2, T右边A的数量 c3  之间;存在数量关系  c1*c2==c3;

 


import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int flagSum = 0;
        ArrayList<String> stringList = new ArrayList<String>();
        Scanner sc = new Scanner(System.in);
        flagSum = Integer.parseInt(sc.nextLine());
        for (int i = 0; i < flagSum; ++i) {
            stringList.add(sc.nextLine());
        }
        // 判断
        for (String x : stringList) {
            judge(x);
        }
    }
    public static void judge(String s) {
        String pattern = "A*PA+TA*";//推导式
        String pattern1 = "PA+T";//对应A数量的第一项正确项
        if (s.matches(pattern)) {
            if (s.matches(pattern1)) {
                System.out.println("YES");
            } else {
                String temp[] = s.split("P|T");
                int aLength = temp[0].length();
                int bLength = temp[1].length();
                int cLength = temp[2].length();
                if (aLength*bLength==cLength) {
                    System.out.println("YES");
                } else {
                    System.out.println("NO");
                }
            }
        } else {
            System.out.println("NO");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值