★★★PAT 1003 我要通过! Python
- 题号:PAT basic level 1003
- 引文链接
方案:正则匹配+数学归纳
题目
作者 CHEN, Yue 单位 浙江大学
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
- 字符串中必须仅有
P
、A
、T
这三种字符,不可以包含其它字符; - 任意形如
xPATx
的字符串都可以获得“答案正确”,其中x
或者是空字符串,或者是仅由字母A
组成的字符串; - 如果
aPbTc
是正确的,那么aPbATca
也是正确的,其中a
、b
、c
均或者是空字符串,或者是仅由字母A
组成的字符串。
现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。
输入格式:
每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。
输出格式:
每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES
,否则输出 NO
。
输入样例:
10
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
APT
APATTAA
输出样例:
YES
YES
YES
YES
NO
NO
NO
NO
NO
NO
鸣谢江西财经大学软件学院朱政同学、用户 woluo_z 补充测试数据!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
- 有注释
# 思路:正则匹配、数学归纳
# 导入正则模块re
# re正则模块可以提供Perl风格正则表达式模式
import re
# int型n,控制循环次数
n = int(input())
for i in range(n):
s = input()
# 正则匹配:解决条件一,仅有且必有P、A、T
# re.match(pattern,string):判断string与pattern是否匹配
# r"...":正则表达式以r起头,具体内容放在""内
# A*:表示*前的字符可以出现0次、1次、或多次
# A+:表示+前的字符,至少出现一次
if re.match(r"A*PA+TA*", s):
# re.split(pattern,string):将string根据pattern分段
# r"[P|T]":r"..."正则表达式,[P|T]匹配P或T
# re.split(r"[P|T]", s):把s从P、T分为三段
a = re.split(r"[P|T]", s)
# 数学归纳:条件二三,字符串a、b、c三者数学关系
# ★★★c = a * len(b)
if a[2] == a[0]*len(a[1]):
print("YES")
else:
print("NO")
else:
print("NO")
- 无注释
import re
n = int(input())
for i in range(n):
s = input()
if re.match(r"A*PA+TA*", s):
a = re.split(r"[P|T]", s)
if a[2] == a[0]*len(a[1]):
print("YES")
else:
print("NO")
else:
print("NO")
标签:PAT,NO,Python,我要,re,正则,字符串,YES,1003
From: https://www.cnblogs.com/haixie2319/p/16727936.html