https://github.com/salmon1802/PAT_B
这题看了半天描述甚至没有懂它在表述什么,后来看了一个老哥的代码豁然开朗:
- 形如xPATx这样的符合,两个x之间长度要一致
- xPATx中间的PAT每加上一个A变为PAAT时,都需要将原来的xPATx变为xPAATxx,以此类推。
x
P
A
T
x
xPATx
xPATx
x
P
A
A
T
x
x
xPAATxx
xPAATxx
x
P
A
A
A
T
x
x
x
xPAAATxxx
xPAAATxxx
x
P
A
A
A
A
T
x
x
x
x
xPAAAATxxxx
xPAAAATxxxx
.
.
.
.
.
.
\\.\\.\\.\\.\\.\\.
......
x
P
A
n
T
x
n
xPA^{n}Tx^{n}
xPAnTxn
归
纳
整
理
后
我
们
可
以
的
到
一
个
公
式
:
P
前
面
的
字
符
串
个
数
?
A
的
个
数
=
T
后
面
的
字
符
串
个
数
归纳整理后我们可以的到一个公式: P前面的字符串个数*A的个数=T后面的字符串个数
归纳整理后我们可以的到一个公式:P前面的字符串个数?A的个数=T后面的字符串个数
所以符合上式的输入即为合格输入 由此想到我们可以想到用java里的正则表达式完成这一题
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main1003 {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bufferedReader.readLine());
for(int i = 0; i < n; i++) {
Matcher matcher = Pattern.compile("(A*)P(A+)T(A*)").matcher(bufferedReader.readLine());
System.out.println(
matcher.matches() != false &&
matcher.group(1).length() * matcher.group(2).length() == matcher.group(3).length()
? "YES" : "NO"
);
}
}
}

|