★★★PAT 1003 我要通过!Python

★★★PAT 1003 我要通过! Python

方案:正则匹配+数学归纳

题目

作者 CHEN, Yue 单位 浙江大学

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

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

  1. 字符串中必须仅有 PAT这三种字符,不可以包含其它字符;
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 abc 均或者是空字符串,或者是仅由字母 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")
posted @   秘密特工Levi  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示