(新卷,100分)-数大雁(JavaPythonJSC++C)

题目描述

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

具体的:

​ 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

输入:

qaauucqcaa

输出:

-1

说明

示例3

输入:

quacqkuackquack

输出:

2

说明

示例4

输入:

qququaauqccauqkkcauqqkcauuqkcaaukccakkck

输出:

5

说明

示例5

输入:

quacqkuquacqkacuqkackuack

输出:

3

说明

解题思路

题目理解

这个题目要求根据地面上的游客听到的大雁叫声(由字符串表示),判断至少有几只大雁在发出叫声。题目假设大雁的完整叫声为“quack”,并且同一时间可能有多只大雁发出这样的叫声。

题目要求的关键点:

  1. 完整性:一个大雁的叫声必须按顺序完整地发出“quack”。这意味着字符串中的字符必须严格按照顺序出现:q -> u -> a -> c -> k。

  2. 多只大雁的情况:多个大雁可以同时发出叫声,造成“quack”片段在字符串中交错出现。例如,字符串“quqacuackk”表示两只大雁在同时发出叫声。

  3. 输入约束:字符串长度在1到1000之间,字符只能是q, u, a, c, k。如果字符串中存在不符合规则的部分,或者字符串无法组合成至少一个完整的“quack”,就需要返回-1。

示例分析

Java

import java.util.Scanner; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; public class Quack { public static void main(String[] args) { // 创建Scanner对象用于读取输入 Scanner scanner = new Scanner(System.in); // 读取输入的字符串 String chars = scanner.nextLine(); // 定义大雁叫声的字符串 String quack = "quack"; // 定义一个数组,用于存储每个字符的状态 int[] states = new int[quack.length()]; // 定义一个ArrayList,用于存储每只大雁的叫声数量 ArrayList<Integer> dp = new ArrayList<>(); // 初始化最大值为0 int max_ = 0; // 遍历输入的字符串 for (int i = 0; i < chars.length(); i++) { // 获取当前字符在"quack"中的索引 int index = quack.indexOf(chars.charAt(i)); // 如果索引为-1,表示输入的字符串包含非法字符,输出-1并退出程序 if (index == -1) { System.out.println(-1); System.exit(0); } // 如果索引为0,表示当前字符是'q',更新状态数组 if (index == 0) { states[index] += 1; } else { // 如果当前字符的前一个字符的状态大于0,更新状态数组 if (states[index - 1] > 0) { states[index - 1] -= 1; states[index] += 1; } // 如果当前字符是'k',表示一个完整的"quack"叫声已经结束 if (quack.charAt(quack.length() - 1) == chars.charAt(i)) { // 如果状态数组的最后一个元素不为0,表示有大雁正在叫 if (states[states.length - 1] != 0) { // 创建一个临时数组,用于计算当前大雁的叫声数量 int[] temp = Arrays.copyOf(states, states.length); temp[states.length - 1] = 0; max_ = Math.max(max_, Arrays.stream(temp).sum()); // 遍历剩余的字符,更新临时数组 for (int j = i; j < chars.length(); j++) { index = quack.indexOf(chars.charAt(j)); if (index > 0 && temp[index - 1] > 0) { temp[index - 1] -= 1; temp[index] += 1; } if (temp[states.length - 1] == max_) { break; } } // 将当前大雁的叫声数量添加到ArrayList中 dp.add(temp[states.length - 1] + 1); // 更新状态数组 states[states.length - 1] -= 1; } } } } // 输出结果,如果dp为空,表示没有找到一只大雁,输出-1;否则输出最大值 System.out.println(dp.isEmpty() ? -1 : (int) Collections.max(dp)); } }

Python

chars = input() # 输入字符串,包含大雁的叫声 quack = "quack" # 大雁叫声的顺序 states = [0] * len(quack) # 用于跟踪每个字符当前出现的状态,初始为全0 dp = [] # 动态规划数组,记录每次完成一个“quack”所需要的最少大雁数量 max_ = 0 # 记录当前最大的大雁数量 for i in range(len(chars)): index = quack.find(chars[i]) # 找到当前字符在“quack”中的位置 if index == -1: # 如果字符不在“quack”中,直接返回-1 print(-1) exit() if index == 0: # 如果是“q”,表示一个新的大雁叫声的开始 states[index] += 1 # 对应位置状态加1 else: if states[index - 1]: # 如果前一个字符的位置状态存在(即有前置字符) states[index - 1] -= 1 # 前一个字符的状态减1 states[index] += 1 # 当前字符的状态加1 if quack[-1] == chars[i]: # 如果当前字符是“k”,即完成了一个“quack” if states[-1] != 0: # 确保有完整的大雁叫声 temp = [t for t in states] # 复制当前状态 temp[-1] = 0 # 将最后一个字符的状态设为0,表示一个大雁叫声结束 max_ = max(max_, sum(temp)) # 更新最大的大雁数量 for j in range(i, len(chars)): # 从当前位置向后继续检查是否有完整的“quack” index = quack.find(chars[j]) if temp[index - 1]: # 如果前一个字符的位置状态存在 temp[index - 1] -= 1 # 前一个字符的状态减1 temp[index] += 1 # 当前字符的状态加1 if temp[-1] == max_: # 如果状态达到最大值 break # 结束当前循环 dp.append(temp[-1] + 1) # 将当前计算的结果记录到动态规划数组 states[-1] -= 1 # 减少完成的“quack”计数 # 输出最大的大雁数量,如果没有找到有效的“quack”,则返回-1 print(max(dp) if dp else -1)

JavaScript

// 引入 readline 模块并创建接口用于读取来自标准输入(stdin)的数据 const rl = require("readline").createInterface({ input: process.stdin }); // 创建异步迭代器,用于按行读取输入 var iter = rl[Symbol.asyncIterator](); // 定义一个异步函数用于读取一行输入 const readline = async () => (await iter.next()).value; // 立即执行的异步函数,主逻辑在此执行 void (async function () { const chars = await readline(); // 读取一行输入数据(假设为大雁叫声的字符串) const quack = "quack"; // 定义标准的“大雁叫声”顺序 const states = new Array(quack.length).fill(0); // 初始化状态数组,用于跟踪每个字符的出现次数 const dp = []; // 动态规划数组,用于记录完成“quack”时大雁的数量 let max_ = 0; // 记录同时发出叫声的大雁的最大数量 // 遍历输入的每一个字符 for (let i = 0; i < chars.length; i++) { const index = quack.indexOf(chars[i]); // 查找当前字符在“quack”中的位置 if (index === -1) { // 如果字符不在“quack”中,表示无效输入 console.log(-1); // 输出-1表示错误 process.exit(); // 终止程序 } if (index === 0) { // 如果是“q”,表示一个新的大雁叫声的开始 states[index] += 1; // 更新状态数组,记录一个新“q”的出现 } else { if (states[index - 1]) { // 如果前一个字符的状态有效 states[index - 1] -= 1; // 前一个字符状态减1 states[index] += 1; // 当前字符状态加1 } // 如果当前字符是“k”,表示一个完整的“quack”结束 if (quack[quack.length - 1] === chars[i]) { if (states[states.length - 1] !== 0) { // 确保有一个完整的“quack” const temp = [...states]; // 复制当前状态数组 temp[states.length - 1] = 0; // 重置最后一个字符的状态 max_ = Math.max(max_, temp.reduce((a, b) => a + b)); // 更新最大大雁数量 // 检查剩余的字符,尝试找到更多的完整“quack” for (let j = i; j < chars.length; j++) { const index = quack.indexOf(chars[j]); // 查找字符位置 if (temp[index - 1]) { // 如果前一个字符状态有效 temp[index - 1] -= 1; // 前一个字符状态减1 temp[index] += 1; // 当前字符状态加1 } if (temp[temp.length - 1] === max_) { // 如果达到最大大雁数量 break; // 停止搜索 } } dp.push(temp[temp.length - 1] + 1); // 记录当前的最大大雁数量 states[states.length - 1] -= 1; // 减少完成的“quack”计数 } } } } // 输出最大的大雁数量,如果没有找到有效的“quack”,则返回-1 console.log(dp.length ? Math.max(...dp) : -1); })();

C++

#include <iostream> #include <vector> #include <algorithm> #include <numeric> using namespace std; int main() { string chars; // 定义输入字符串,用于存储游客听到的大雁叫声 cin >> chars; // 从标准输入中读取字符串 string quack = "quack"; // 定义标准的大雁叫声顺序 vector<int> states(quack.size(), 0); // 定义一个状态数组,用于跟踪每个字符的出现次数 vector<int> dp; // 动态规划数组,用于记录完成“quack”时大雁的数量 int max_ = 0; // 用于记录同时发出叫声的大雁的最大数量 // 遍历输入字符串中的每一个字符 for (int i = 0; i < chars.size(); i++) { int index = quack.find(chars[i]); // 找到当前字符在“quack”中的位置 if (index == -1) { // 如果字符不在“quack”中,输出-1并结束程序 cout << -1 << endl; exit(0); } if (index == 0) { // 如果是“q”,表示一个新的大雁叫声的开始 states[index] += 1; // 更新状态数组,表示一个新“q”的开始 } else { if (states[index - 1]) { // 检查前一个字符的状态是否有效 states[index - 1] -= 1; // 前一个字符的状态减1 states[index] += 1; // 当前字符的状态加1 } if (quack[quack.size() - 1] == chars[i]) { // 如果当前字符是“k”,表示一个完整的“quack”结束 if (states[states.size() - 1] != 0) { // 确保有一个完整的“quack”存在 vector<int> temp(states); // 复制当前状态数组 temp[states.size() - 1] = 0; // 重置最后一个字符的状态 max_ = max(max_, accumulate(temp.begin(), temp.end(), 0)); // 更新最大大雁数量 // 检查剩余的字符,尝试找到更多的完整“quack” for (int j = i; j < chars.size(); j++) { index = quack.find(chars[j]); if (temp[index - 1]) { // 检查前一个字符的状态是否有效 temp[index - 1] -= 1; // 前一个字符的状态减1 temp[index] += 1; // 当前字符的状态加1 } if (temp[states.size() - 1] == max_) { // 如果达到最大大雁数量,停止循环 break; } } dp.push_back(temp[states.size() - 1] + 1); // 记录当前的最大大雁数量 states[states.size() - 1] -= 1; // 减少完成的“quack”计数 } } } } // 输出最大的大雁数量,如果没有找到有效的“quack”,则返回-1 cout << (dp.empty() ? -1 : *max_element(dp.begin(), dp.end())) << endl; return 0; }

C语言

#include <stdio.h> // 标准输入输出库 #include <stdlib.h> // 包含 exit 函数 #include <string.h> // 字符串处理库 #define MAX_LEN 1000 // 定义输入字符串的最大长度 int main() { char chars[MAX_LEN]; // 定义输入字符串数组,用于存储游客听到的大雁叫声 scanf("%s", chars); // 从标准输入中读取字符串 char quack[] = "quack"; // 定义标准的大雁叫声顺序 int states[5] = {0}; // 定义一个状态数组,用于跟踪每个字符的出现次数 int dp[MAX_LEN] = {0}; // 动态规划数组,用于记录完成“quack”时大雁的数量 int max_ = 0; // 用于记录同时发出叫声的大雁的最大数量 int dp_index = 0; // 动态规划数组的索引 // 遍历输入字符串中的每一个字符 for (int i = 0; i < strlen(chars); i++) { int index = -1; // 用于存储当前字符在“quack”中的位置 for (int k = 0; k < strlen(quack); k++) { // 手动查找当前字符在“quack”中的位置 if (chars[i] == quack[k]) { index = k; break; } } if (index == -1) { // 如果字符不在“quack”中,输出-1并结束程序 printf("-1\n"); exit(0); } if (index == 0) { // 如果是“q”,表示一个新的大雁叫声的开始 states[index] += 1; // 更新状态数组,表示一个新“q”的开始 } else { if (states[index - 1]) { // 检查前一个字符的状态是否有效 states[index - 1] -= 1; // 前一个字符的状态减1 states[index] += 1; // 当前字符的状态加1 } if (quack[strlen(quack) - 1] == chars[i]) { // 如果当前字符是“k”,表示一个完整的“quack”结束 if (states[strlen(quack) - 1] != 0) { // 确保有一个完整的“quack”存在 int temp[5]; // 定义临时状态数组 for (int t = 0; t < 5; t++) { temp[t] = states[t]; // 复制当前状态数组 } temp[strlen(quack) - 1] = 0; // 重置最后一个字符的状态 int temp_sum = 0; // 计算当前状态数组的和 for (int t = 0; t < 5; t++) { temp_sum += temp[t]; } if (temp_sum > max_) { // 更新最大大雁数量 max_ = temp_sum; } // 检查剩余的字符,尝试找到更多的完整“quack” for (int j = i; j < strlen(chars); j++) { int inner_index = -1; for (int k = 0; k < strlen(quack); k++) { if (chars[j] == quack[k]) { inner_index = k; break; } } if (temp[inner_index - 1]) { // 检查前一个字符的状态是否有效 temp[inner_index - 1] -= 1; // 前一个字符的状态减1 temp[inner_index] += 1; // 当前字符的状态加1 } if (temp[strlen(quack) - 1] == max_) { // 如果达到最大大雁数量,停止循环 break; } } dp[dp_index++] = temp[strlen(quack) - 1] + 1; // 记录当前的最大大雁数量 states[strlen(quack) - 1] -= 1; // 减少完成的“quack”计数 } } } } // 输出最大的大雁数量,如果没有找到有效的“quack”,则返回-1 if (dp_index == 0) { printf("-1\n"); } else { int result = dp[0]; for (int i = 1; i < dp_index; i++) { if (dp[i] > result) { result = dp[i]; } } printf("%d\n", result); } return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1150172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

港口综合治理空间智能平台专项建设方案——人–车–船–设备一体化的空间视频智能治理技术路径

港口综合治理空间智能平台专项建设方案 ——人–车–船–设备一体化的空间视频智能治理技术路径 建设单位&#xff1a;镜像视界&#xff08;浙江&#xff09;科技有限公司 一、建设背景与治理挑战 港口是典型的高密度、多要素、强耦合运行空间&#xff0c;人员、车辆、船舶和…

玩过电机的都知道,BLDC控制最刺激的就是在无传感和有传感之间反复横跳。今天带大家扒一扒基于STM32F1的这套双料方案,手把手看代码怎么把电机治得服服帖帖

电机控制源码 电机控制源码&#xff0c;BLDC无刷直流电机基于stm3 2F1的有传感器和无传感驱动 直流无刷电机有传感器和无传感驱动程序识货的赶紧上车。 无传感的的实现是基于反电动势过零点实现的&#xff0c;无传感是霍尔实现&#xff0c;可供学习参考&#xff0c;程序有详细注…

HMI信息架构设计:四层金字塔模型——构建符合认知负荷的高效界面

在信息爆炸的现代工业现场&#xff0c;将成百上千个数据点杂乱地堆砌在HMI屏幕上&#xff0c;是对操作员认知能力的巨大挑战&#xff0c;尤其在压力下极易导致误判。优秀的HMI设计&#xff0c;本质是信息架构的设计。四层金字塔模型为此提供了一个经过验证的、符合人类认知规律…

Springboot少儿编程管理系统760av(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;课程分类,家长,课程信息,购买课程,完整课程,学生信息,通知公告 开题报告内容 一、选题背景与意义 &#xff08;一&#xff09;选题背景 政策驱动&#xff1a; 国家《新一代人工智能发展规划》明确要求“在中小学阶段设置人工智能相关…

Flutter for OpenHarmony 实战:Switch 开关按钮详解

Flutter for OpenHarmony 实战&#xff1a;Switch 开关按钮详解&#x1f4a1; 摘要&#xff1a;本文将深度解析 Flutter 框架中 Switch 开关按钮在 OpenHarmony 平台的应用实践。通过剖析其核心属性、事件响应机制、样式定制技巧及跨平台适配方案&#xff0c;结合 5 个可验证代…

手把手玩转MATLAB时间序列预测:NAR神经网络实战

时间序列nar自回归神经网络预测matlab程序代码 。 代 码直接运行即可&#xff0c;数据excel格式。最近在研究电力负荷预测的时候&#xff0c;发现MATLAB的NAR神经网络用起来真香。直接把时间序列数据喂进去&#xff0c;不用做复杂的特征工程就能出效果。今天给大家分享一套开箱…

海关智慧监管空间智能平台专项技术方案——基于空间视频感知与统一空间智能底座的非侵入式监管路径

海关智慧监管空间智能平台专项技术方案——基于空间视频感知与统一空间智能底座的非侵入式监管路径建设单位&#xff1a;镜像视界&#xff08;浙江&#xff09;科技有限公司一、建设背景与监管挑战随着国际贸易规模扩大和跨境要素流动频率持续提升&#xff0c;海关监管对象呈现…

(新卷,100分)- 掌握的单词个数(Java JS Python C)

(新卷,100分)- 掌握的单词个数&#xff08;Java & JS & Python & C&#xff09;题目描述有一个字符串数组 words 和一个字符串 chars。假如可以用 chars 中的字母拼写出 words 中的某个“单词”&#xff08;字符串&#xff09;&#xff0c;那么我们就认为你掌握了这…

拯救HMI×施耐德电气|以AI重塑工业人机交互新范式

近日&#xff0c;由工业和信息化部国际经济技术合作中心与施耐德电气共同举办的“2025施耐德电气创赢计划第六季创新日”在上海圆满落幕。安徽省英特费斯工业设计有限公司&#xff0c;以下简称“拯救HMI”&#xff0c;凭借其在工业人机界面设计领域的前瞻布局与技术实力&#x…

Flutter for OpenHarmony 实战:Slider 滑块控件详解

Flutter for OpenHarmony 实战&#xff1a;Slider 滑块控件详解 摘要 本文深度解析 Flutter 框架在 OpenHarmony 平台中 Slider 滑块控件 的核心用法与技术实践。内容涵盖基础属性配置、样式定制化技巧、跨平台事件处理机制&#xff0c;以及鸿蒙原生控件与 Flutter 实现的对比方…

口岸综合治理空间智能平台建设总方案——基于空间视频感知与统一空间智能底座的协同治理技术路径

口岸综合治理空间智能平台建设总方案——基于空间视频感知与统一空间智能底座的协同治理技术路径建设单位&#xff1a;镜像视界&#xff08;浙江&#xff09;科技有限公司一、建设背景&#xff1a;口岸治理进入“高密度协同”阶段口岸是人员、货物、交通工具与监管力量高度集中…

Docker 详解与部署微服务实战

Docker 详解与部署微服务实战 主讲老师&#xff1a;Fox 有道笔记地址链接&#xff1a;https://note.youdao.com/s/8eWHV1Jr 1. Docker详解 1.1 Docker简介 Docker 是一个开源的容器化平台&#xff0c;可以帮助开发者将应用程序和其依赖的环境打包成一个可移植、可部署的容器…

1.6 ScriptableObject

1.ScritableObject简介1.ScritableObject简介 ScritableObject是继承自UnityEngine.Object的特殊基类, 用于保存数据; 它是纯数据文件, 独立于GameObject存在, 没有生命周期函数, 只负责存储数据(数值, 素材引用, 配置等), 数据保存在.asset格式的资源文件中, 可在Inspector面板…

智慧边检空间智能平台建设方案——基于空间视频感知与统一空间智能底座的新一代边检监管体系

智慧边检空间智能平台建设方案——基于空间视频感知与统一空间智能底座的新一代边检监管体系建设单位&#xff1a;镜像视界&#xff08;浙江&#xff09;科技有限公司一、建设背景&#xff1a;边检监管进入“全过程智能化”阶段随着国际人员流动规模持续扩大&#xff0c;口岸边…

[微机原理与系统设计-从入门到入土] 输入输出IO

[微机原理与系统设计-从入门到入土] 输入输出IO 知乎&#xff1a;https://www.zhihu.com/people/byzh_rc CSDN&#xff1a;https://blog.csdn.net/qq_54636039 注&#xff1a;本文仅对所述内容做了框架性引导&#xff0c;具体细节可查询其余相关资料or源码 参考文章&#x…

到处都说Claude Code和Skills,免费免注册用户使用了一下

Anthropic这家公司和Google的格局和思维差别太大。 TPU推理能力过剩、成本不高的情况下&#xff0c;利用过剩能力抢占市场其实是有用的。 我看来一下使用原生的anthropic api key需要支付&#xff0c;使用claude code授权也需要5美元起&#xff0c;还不支持国内的支付方式&…

Flutter for OpenHarmony 实战:TextButton 文本按钮详解

Flutter for OpenHarmony 实战&#xff1a;TextButton 文本按钮详解 摘要&#xff1a;本文将深入探讨 Flutter 框架在 OpenHarmony 平台上 TextButton 控件的应用实践。作为 Flutter 中最常用的交互控件之一&#xff0c;TextButton 以其简洁的设计风格和灵活的定制能力成为构建…

Langfuse:开源LLM工程平台全解析

Langfuse:开源LLM&#xff08;大型语言模型&#xff09;工程平台 目录Langfuse:开源LLM&#xff08;大型语言模型&#xff09;工程平台&#x1f4dd; Langfuse是什么&#xff1f;✨ 核心功能是什么&#xff1f;&#x1f527; 如何使用Langfuse&#xff1f;&#x1f4a1; 举例说…

基于深度学习的火焰烟雾识别系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

【epub2pdf 转换器】OSError: cannot load library ‘libgobject-2.0-0‘: dlopen

【epub2pdf 转换器】OSError: cannot load library ‘libgobject-2.0-0’: dlopen 文章目录【epub2pdf 转换器】OSError: cannot load library libgobject-2.0-0: dlopen报错信息&#xff1a;解决&#xff1a;方案 A&#xff08;推荐&#xff0c;conda-forge 一把梭&#xff09…