Java题解—1003 我要通过!

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

  • 题目解读
    1、有且仅有PAT这三种字符
    2、P与T字符仅有一个
    2、'P'和'T'中间必须有一个'A'字符
    3、'P'和'T'字符把字符串分为三段,P前面的A数量 * PT中间的A数量等 = T后面的A数量

  • 我的麻烦的代码,用数组

package pat;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();

        while (num>0){
            String str = scanner.next();
            char[] chars = str.toCharArray();
            int PNum=0,ANum=0,TNum=0;
            int PIndex=0,AIndex=0,TIndex=0;
            int flag=0;

            for (int j=0;j<chars.length;j++) {
                switch (chars[j]){
                    case 'P':
                        PNum++;
                        PIndex=j;
                        break;
                    case 'A':
                        ANum++;
                        AIndex=j;
                        break;
                    case 'T':
                        TNum++;
                        TIndex=j;
                        break;
                    default: //确保没有PAT外的字符
                        flag=-1000;
                }
                if (PIndex<AIndex&&AIndex<TIndex){//保证'P'和'T'中间必须有一个'A'字符
                    flag++;
                }
            }
            if (PNum!=1||TNum!=1||ANum<1||flag<1){//P与T字符仅有一个
                System.out.println("NO");
            }else if(PIndex*(TIndex-PIndex-1)==(chars.length-1-TIndex)) {//P之前的A的数量 × P T中间A的数量 == T之后A的数量
                System.out.println("YES");
            }else{
                System.out.println("NO");
            }

            num--;
        }

    }
}

总结:

习惯性用数组,别人的正则匹配好简单啊!
mark:https://blog.csdn.net/weixin_44034328/article/details/103413404

posted @ 2021-10-03 00:11  Infinite_V胜  阅读(36)  评论(0)    收藏  举报