0
点赞
收藏
分享

微信扫一扫

[PAT]1003. 我要通过! (Python)


Introduction【背景】

  • 最近虽从事数据分析工作,但总感觉每天的进步比较慢,有时候心里不免有些失落。也由于个人需要(PAT考试),因此近期开始在​​计算机程序设计能力考试(Programming Ability Test,简称PAT)​​网站刷算法试题。
  • 目前主要使用Python进行开发,因此大多数PAT解题思路将通过Python展示、实现。

Descriptioin

  • 问题如图 1-1 所示。
  • [PAT]1003. 我要通过! (Python)_字符串

  • 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​​


举报

相关推荐

0 条评论