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