PAT乙级真题及训练集-1003

1003. 我要通过!(20)


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

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

1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 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

思路:

    此题关键在于条件三的理解。

        若按条件二输入“PAT”,则按aPbTc格式转换时,a=null,b=A,c=null。再以此a,b,c的值代入aPbATca中,得到“PAAT”,此时,a=null,b=AA,c=null。若继续代入,会得到“PAAAT”……总结可得正则表达式pattern2

        若按条件二输入“APATA”,则按aPbTc格式转换时,a=A,b=A,c=A。再以此a,b,c的值代入aPbATca中,得到“APAATAA”,此时,a=A,b=A,c=A。若继续代入,会得到“APAAATAAA”……总结可得正则表达式Pattern1,及

P前A个数*P至T之间A个数=T后A个数

若符合此条件,则输出“YES”,否则输出“NO”

思路参考:https://blog.csdn.net/zhouhuakang/article/details/50756195

package com.PAT;

import java.util.Scanner;

public class Main_1003 {
	public static void main(String[] args) {
		
		int n;	//输入数字个数
		String pattern1= "A*PA+TA*";	//创建对比正则表达式
		String pattern2= "PA+T";		//a=null c=null
		
		Scanner sc= new Scanner(System.in);
		n= sc.nextInt();
		String[] arr= new String[n];	//字符串存储数组
		
		for (int i=0; i<n; i++) {
			arr[i]= sc.next();
		}
		
		for (int i=0; i<arr.length; i++) {
			if (arr[i].matches(pattern2)) {
				System.out.println("YES");
			}else if (arr[i].matches(pattern1)) {
				String[] a= arr[i].split("P|T");
				int alength= a[0].length();		//P前面A的个数
				int blength= a[1].length();		//P至T之间A的个数
				int clength= a[2].length();		//T之后A的个数
				if (alength*blength == clength) {
					System.out.println("YES");
				}else {
					System.out.println("NO");
				}
			}else {
				System.out.println("NO");
			}
			
		}
		
		sc.close();
	
	}
	
}

猜你喜欢

转载自blog.csdn.net/chianing_han/article/details/79888543
今日推荐