自己看---华为od-数大雁

题目描述

一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。

具体的:

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())
相关推荐
爱吃苹果的日记本2 小时前
数据结构第四课—线性表Linear List
数据结构·学习
Lyyaoo.3 小时前
【动态规划】【待更新】
java·数据结构·算法
我不会起名字3223 小时前
一天一道算法题(35):电话号码的字母组合
java·数据结构·后端·python·leetcode·go·回溯
鹿角片ljp4 小时前
LeetCode 78:子集|回溯、选与不选、递归和path快照
java·数据结构·算法
YSL0701244 小时前
顺序表小补充
数据结构
wabs6665 小时前
关于二叉树【力扣101.对称二叉树的思考】
数据结构·c++·算法·leetcode·二叉树
LuminousCPP6 小时前
数据结构-排序(五):计数排序与排序专题阶段总结|从外部归并到线性排序,再看算法边界与选型
c语言·数据结构·笔记·算法·排序算法
linx2956 小时前
第七章 · 标准库容器、算法与 ranges
c语言·开发语言·数据结构·c++·算法
Logic1017 小时前
C语言/数据结构位运算题解:异或XOR找出独特数字的索引位置——成对数字在两侧
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
橘子汽水1687 小时前
Leetcode 763,45 划分字母区间 跳跃游戏II
数据结构·算法·leetcode