一、题目回顾:三条「三位一体」校验规则
想要一条报文指令判定为有效,必须同时满足下面 3 个条件,缺一不可:
- 首尾约束:字符串开头必须是大写
R,结尾必须是大写A; - 数字数量约束:剔除开头
R、结尾A后的中间内容,里面恰好包含 3 个数字字符; - 长度约束:整条字符串总长度(包含 R、A)小于等于 10。
输入格式:
- 第一行输入整数
n,代表一共有多少条待检测的候选指令; - 接下来
n行,每行输入一条由大小写字母、数字组成的字符串。
输出格式:输出符合所有规则的有效指令总条数。
样例 1
输入:
输出:2
样例 2
输入:
5R007abcdeAR007abcdefAr123AR123aA123R
输出:1
二、分步拆解解题思路(新手重点看)
做字符串类题目,最稳妥的方式就是把每一条规则拆成独立判断条件,一条不满足就直接舍弃当前报文,流程非常清晰。
步骤 1:读取数据,准备计数器
先读取报文总条数n,创建计数器count用来统计有效报文数量,初始值设为 0。
步骤 2:逐条校验每条报文
对每一条读取到的字符串,依次校验三条规则:
- 校验首尾字符:第一个字符是不是大写
R,最后一个字符是不是大写A;不满足直接跳过这条报文; - 校验总长度
- 统计中间数字个数:用切片
s[1:-1]去掉首尾的 R 和 A,拿到中间子串;遍历中间子串所有字符,统计其中数字的数量;如果数字刚好等于 3,这条报文有效,计数器加 1。
步骤 3:循环结束输出计数器的值
所有报文校验完成后,打印最终统计的有效报文总数即可。
三、可直接运行完整代码
n = int(input())count = 0for _ in range(n): s = input().strip() # 规则1:开头大写R,结尾大写A if s[0] != 'R' or s[-1] != 'A': continue # 规则3:总长度不超过10 if len(s) > 10: continue # 获取中间部分,统计数字数量 mid = s[1:-1] digit_cnt = 0 for c in mid: if c.isdigit(): digit_cnt += 1 # 规则2:恰好3个数字 if digit_cnt == 3: count += 1print(count)
四、代码关键知识点讲解
s[0]、s[-1]:分别获取字符串第一个、最后一个字符;continue:当前报文不符合条件,直接结束本轮循环,检测下一条报文;s[1:-1]:字符串切片,剔除第 0 位(R)和最后一位(A),拿到中间内容;c.isdigit():Python 内置方法,判断单个字符是否为数字,是就返回 True。
五、样例校验复盘,理解判定逻辑
样例 1 分析
样例 2 分析
六、新手做题小总结
遇到多条件判断的字符串题目,通用套路:
- 需要统计字符类型时,遍历字符串搭配
isdigit这类内置函数;
后续会持续更新更多入门编程题拆解,想学 Python 刷题可以关注~