蓝桥杯python备赛-16届省赛B
·
问题描述
小蓝有一个字符串 ss,他特别喜欢由以下三个字符组成的单词:l,q,b,任意顺序都可以,一共有 66 种可能:lqb、lbq、qlb、qbl、blq、bql
现在他想从 s 中,尽可能切割出多个他喜欢的单词,请问最多能切割出多少个?单词指的是由若干个连续的字符组成的子字符串。
输入格式
输入一行包含一个字符串 s。
输出格式
输出一行包含一个整数表示答案。
样例输入
lqbblqblqlxqb
样例输出
3
代码
import sys
s = sys.stdin.readline()#输入,如输入"abcdefg",返回"abcdefg"
n = len(s)#计算字符串长度
count = 0#计数,初始值0
i = 0
# 定义目标:排序后为 blq 即为合法
target = "blq"
while i <= n - 3:
#截取长度为3的子串
a = s[i : i + 3]
#将子串排序后与目标对比
#例如 "qlb" -> sorted -> ['b','l','q'] -> "blq"
sub = (''.join(sorted(a)))
if sub == target:
count += 1
i += 3 # 找到了,跳过这3个字符
else:
i += 1 # 没找到,尝试下一个位置
print(count)
学习
#1、快速输入
import sys
data = sys.stdin.read().split()#处理海量数据,按空格分割
list(set(data))## 把列表的重复数据去掉,最快的方法是将其转成集合
#返回字符串列表 ['str', 'str', ...]
n = int(sys.stdin.readline())#读取整数
#返回整型数字,读取一行,通常带回车符 \n
#int() 会自动忽略字符串首尾的空白符(包括回车),将其转换为整数
arr = list(map(int, sys.stdin.readline().split()))#读取一行整数
#返回整数列表 [int, int, ...]
m = sys.stdin.readline().strip()#去除最后一行空格
#返回字符串
#strip() 会去除字符串首尾的空白字符(包括换行符 \n 和空格)。
# 如果需要返回数字,通常还需要包裹一层 int()
#读取矩阵n行m列
matrix = []
for _ in range(n):
row = list(map(int, sys.stdin.readline().split()))
matrix.append(row)
更多推荐


所有评论(0)