题目描述
一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。
具体的:
1.大雁发出的完整叫声为"quack",因为有多只大雁同一时间嘎嘎作响,所以字符串中可能会混合多个"quack"。
2.大雁会依次完整发出"quack",即字符串中'q' ,'u', 'a', 'c', 'k' 这5个字母按顺序完整存在才能计数为一只大雁。如果不完整或者没有按顺序则不予计数。
3.如果字符串不是由'q', 'u', 'a', 'c', 'k' 字符组合而成,或者没有找到一只大雁,请返回-1。
输入描述
一个字符串,包含大雁quack的叫声。1 <= 字符串长度 <= 1000,字符串中的字符只有'q', 'u', 'a', 'c', 'k'。
输出描述
大雁的数量
用例1
输入
quackquack
输出
1
用例2
输入
qaauucqckk
输出
-1
用例3
输入
quacqkuac
输出
1
用例4
输入
qququaauqccauqkkcauqqkcauuqkcaaukccakkck
输出
5
python
quacks = input() # 从标准输入读取一个字符串
# 算法入口
def findNum():
q_index = [] # 用于存储所有'q'字符的位置
u, a, c = 0, 0, 0 # 分别用于计数'u', 'a', 'c'字符的出现次数
quack_index = [] # 用于存储每个完整大雁叫声序列的开始和结束位置
for i in range(len(quacks)):
char = quacks[i]
if char == 'q':
q_index.append(i) # 记录'q'字符的位置
elif char == 'u':
if u + 1 <= len(q_index): # 检查是否有足够的'q'
u += 1 # 增加'u'的计数
elif char == 'a':
if a + 1 <= u: # 检查是否有足够的'u'
a += 1 # 增加'a'的计数
elif char == 'c':
if c + 1 <= a: # 检查是否有足够的'a'
c += 1 # 增加'c'的计数
elif char == 'k':
if c >= 1: # 检查是否有足够的'c'
quack_index.append([q_index.pop(0), i]) # 记录一个完整的大雁叫声序列的开始和结束位置
u -= 1 # 减少'u'的计数
a -= 1 # 减少'a'的计数
c -= 1 # 减少'c'的计数
else:
return -1 # 如果出现其他字符,返回-1表示输入无效
if len(quack_index) == 0:
return -1 # 如果没有完整的大雁叫声序列,返回-1
cnt = 1 # 初始化最大同时叫的大雁数
for i in range(len(quack_index)):
count = 1 # 初始化当前序列的重叠次数
for j in range(i + 1, len(quack_index)):
if quack_index[i][1] >= quack_index[j][0]: # 检查当前序列是否与后续序列重叠
count += 1 # 增加重叠次数
cnt = max(cnt, count) # 更新最大同时叫的大雁数
return cnt # 返回最大同时叫的大雁数
# 算法调用
print(findNum())