Introduction【背景】
- 最近虽从事数据分析工作,但总感觉每天的进步比较慢,有时候心里不免有些失落。也由于个人需要(PAT考试),因此近期开始在计算机程序设计能力考试(Programming Ability Test,简称PAT)网站刷算法试题。
- 目前主要使用Python进行开发,因此大多数PAT解题思路将通过Python展示、实现。
Descriptioin
- 问题如图 1-1 所示。
- ps:不用怀疑你的智商,该问题不仅一开始我没有看懂,到后来我也是似懂非懂 ? 此处略去100字(你懂的)。
Solution [NEW]
- 问题陷阱:
- 每个字符串中只包含一个字母 “P”、一个字母 “T” .
- 由后 2 步能够得出什么关系
- 分支判断:
- 字符串中 “P”、”T”个数为 1、index(‘P’)<index(‘T’) .
- c 中 “A” 的个数等于 a 中 “A” 的个数与b 中 “A” 的个数之积 .
Coding
# issue: 1003. 我要通过!(20)
# author:kngines
# time:20171105
# version: Python 3.6
import re
nums=input() # 接受输入值
result=[str(0) for i in range(int(nums))] # 初始化结果列表
for i in range(int(nums)):
t_str=input()
if ('P' in t_str) & ('T' in t_str): # 排除包含多个 P、T的情况,即代替模式匹配 A*PA+TA*、PA+T
p_cnt,a_cnt,t_cnt,=t_str.count('P'),t_str.count('A'),t_str.count('T') # 统计PAT个数
if (p_cnt==1)&(t_cnt == 1)&(t_str.index('P')<t_str.index('T')): # 存在单个 P、T,并且P在T之后
if (p_cnt*a_cnt*t_cnt!=0) & (p_cnt+a_cnt+t_cnt==len(t_str)): # 规律
tmp=re.split('P|T',t_str) # 分片
# 分支统计结果
result[i] ='YES' if tmp[0].count('A')*tmp[1].count('A')==tmp[2].count('A') else 'NO'
else:
result[i]='NO'
else:
result[i]='NO'
else:
result[i]='NO'
for val in result:
print (val)
# 测试数据
# PAT YES
# PAAT YES
# AAPATAA YES
# AAPAATAAAA YES
# xPATx NO
# PT NO
# Whatever NO
# APAAATAA NO
# APAAPAAAATAAAA NO
Plus
- 由于该试题有很多分析版本,这里不再赘述。这里给出参考[PAT]1003. 我要通过!(20)
- Java版本实现可以参考Pat1003.java