问题描述

小蓝有一个字符串 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)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐