华为机试 - 数大雁

news2025/7/19 0:05:37

目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

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

具体的:

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’。

输出描述

大雁的数量

用例

输入quackquack
输出1
说明
输入qaauucqckk
输出-1
说明
输入quacqkuac
输出1
说明
输入qququaauqccauqkkcauqqkcauuqkcaaukccakkck
输出5
说明

题目解析

本题虽然看起来和LeetCode - 1419 数青蛙_伏城之外的博客-CSDN博客

很像,但是难度却要大于leetcode这道题,原因是

大雁会依次完整发出”quack”,即字符串中’q’ ,‘u’, ‘a’, ‘c’, ‘k’ 这5个字母按顺序完整存在才能计数为一只大雁。如果不完整或者没有按顺序则不予计数

而leetcode数青蛙

如果字符串 croakOfFrogs 不是由若干有效的 "croak" 字符混合而成,请返回 -1 。

leetcode这题,如果存在不完整或者不按顺序的叫声,则直接返回-1。结束程序。

而本题,则对于不完整或者不按顺序的叫声,只是不予计数,后面还要继续统计。

比如 quaquck

如果按照leetcode数青蛙逻辑来做的话,结果应该返回-1。

而本题逻辑却需要返回1。

leetcode难度小的原因是,不需要考虑剔除不完整或者不按顺序的叫声。

而本题难度大的原因是,需要考虑剔除不完整或者不按顺序的叫声。

我的解题思路是,求出每个叫声quack的区间范围,即一次叫声的:[q索引位置,k索引位置]。

实现是:从左到右遍历叫声字符串,遇到q,则将其索引位置加入缓存中,

遇到u,则判断u出现的次数是否超过了q出现的次数,若是则忽略本次u,否则u次数++

遇到a,则判断a出现的次数是否超过了u出现的次数,若是则忽略本次a,否则a次数++

遇到c,则判断c出现的次数是否超过了a出现的次数,若是则忽略本次c,否则c次数++

遇到k,则判断c次数是否大于等于1,若否,则忽略本次k,否则出队第一个q出现索引和本次k的索引,组合成一个区间范围,然后u--,a--,c--,表示取出了一次叫声。

按照上面逻辑,我们可以剔除掉不完整或者不按顺序的叫声,并且获得每个合法叫声的区间范围。

接下来就是遍历每一个区间,和后面区间比较,看是否有交集,若有,则记录交集数。

最终最大的交集数就是最多大雁数。

下图是用例3:qququaauqccauqkkcauqqkcauuqkcaaukccakkck

各合法叫声区间的交集示意图

 

 

 

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const lines = [];
rl.on("line", (line) => {
  console.log(getResult(line));
});

function getResult(quacks) {
  let q, u, a, c, k;
  q = [];
  u = 0;
  a = 0;
  c = 0;

  const range = [];

  for (let i = 0; i < quacks.length; i++) {
    switch (quacks[i]) {
      case "q":
        q.push(i);
        break;
      case "u":
        if (u + 1 <= q.length) u++;
        break;
      case "a":
        if (a + 1 <= u) a++;
        break;
      case "c":
        if (c + 1 <= a) c++;
        break;
      case "k":
        if (1 <= c) {
          range.push([q.shift(), i]);
          u--;
          a--;
          c--;
        }
        break;
      default:
        return -1;
    }
  }

  if (!range.length) return -1;

  let max = 1;
  for (let i = 0; i < range.length; i++) {
    let count = 1;
    for (let j = i + 1; j < range.length; j++) {
      if (range[i][1] >= range[j][0]) count++;
    }
    max = Math.max(max, count);
  }

  return max;
}

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

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

相关文章

怎么还不会进制转换,进来学。

✨进制转换&#xff0c;深度讲解✨特殊的十进制转换&#xff08;整数&#xff09;一、十进制转换为其他进制二、其他进制转换为十进制二进制的特殊转换&#xff08;整数&#xff09;一、二进制转换为其他进制二、其他进制转换为二进制任意进制的转换&#xff08;整数&#xff0…

Java项目:JSP高校新生报到迎新管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 辅导员角色包含以下功能&#xff1a; 辅导员登录,学生留言管理,新生报到管理,宿舍分配管理等功能。 财务管理角色包含以下功能&#xff1a; 财务…

一道Android题目逆向动态调试

题目来源于海淀区网络与信息安全管理员大赛&#xff0c;题目中将加密验证算法打包进.so&#xff0c;在程序中动态调用check。 本题目通过System.loadLibrary(“native-lib”)加载了libnative-lib.so文件&#xff0c;该文件通过jeb可以实现提取 图1 题目关键代码 调试环境选择…

【矩阵论】4.矩阵运算——广义逆——定义性质与特殊矩阵的广义逆

4.3 广义逆 4.3.1 定义 若mn矩阵AAmn与矩阵XXnm满足四个条件①AXAA,②XAXX&#xff0c;③(AX)HAX,④(XA)HXA则X为A的加号逆(广义逆)&#xff0c;记为XA\begin{aligned} &若 m\times n 矩阵AA_{m\times n} 与矩阵 XX_{n\times m} 满足四个条件\\ &①AXAA,\quad ② XAXX…

以太坊:轻松理解EIP-4844

以太坊&#xff1a;轻松理解EIP-4844 以太坊网络在不断发展&#xff0c;多年来已经提出了许多技术提案。其中一个提案是由Vitalik Buterin提出的EIP-4844&#xff0c;它关注的是分片技术。 什么是EIP-4844&#xff0c;它将如何影响以太坊网络及其用户的未来&#xff1f;以下是…

体系结构28_多处理机(2)

对称式共享存储器体系结构 多处理机Cache一致性 **多个处理器共享一个存储器 **当处理器规模较小时&#xff0c;这种机器十分经济 **支持对共享数据和私有数据的Cache缓存 私有数据供一个单独的处理器使用&#xff0c;而共享数据供多个处理器使用 ** 共享数据进入Cache产生了一…

LeetCode 654.最大二叉树 617合并二叉树 700二叉搜索树中的搜索 98验证二叉搜索树

文章目录654最大二叉树c代码实现python 代码实现617合并二叉树c 代码实现python 代码实现700二叉搜索树中的搜索c代码实现python 代码实现98验证二叉搜索树c 代码实现python 代码实现654最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归…

[附源码]java毕业设计在线购物商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]java毕业设计疫情居家隔离服务系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

阿里云与信通院邀您参与云原生安全用户调研

云原生安全建设已经成为企业云原生平台建设、应用云原生化改造进程中的必备项。在云原生的大势所趋下&#xff0c;云的分布式架构、容器化部署、边界消失等特点也带来了有别于传统硬件安全的模式&#xff1a;镜像漏洞、容器逃逸、租户隔离等安全问题威胁着企业的云原生平台和应…

Unity动态创建Avatar骨骼映射

目录前言1 了解Avatar骨骼映射2 动态创建Avatar骨骼映射2.1 寻找相关APIAvatarBuilder.BuildHumanAvatarDeclarationParametersReturnsDescriptionHumanDescriptionDescriptionProperties2.2 创建Skeleton数据2.3 创建Human映射关系2.4 创建Avatar3 总结前言 为了让单个动画可…

Linux(基于Centos7)(四)

文章目录一、任务目标二、任务资讯三、任务实施3-1.RPM软件包管理3-2.YUM方式安装软件一、任务目标 实施该工单的任务目标如下&#xff1a; 知识目标 1.了解RPM提供的功能。 2.了解YUM相对于RPM所具有的优点。 能力目标 1.能够通过RPM安装及管理软件包。 2.能够通过YUM安装及管…

MCE | ATM 激酶活化变单体后的神奇开挂!

ATM (Ataxia-telangiectasia mutated proteins) 是一种丝氨酸-苏氨酸蛋白激酶&#xff0c;是 DNA 损伤应答 (DDR) 的关键调节因子。ATM 是位名副其实的“指挥官”&#xff0c;在 DNA 双链断裂 (DSB) 中&#xff0c;参与细胞周期检查点维护、DNA 损伤修复和端粒维护等&#xff0…

基于Android的个人健康管理系统

目 录 基于Android的个人健康管理系统 Personal Health Management System Based On Android 1 引言 1 1.1 课题背景 1 1.2 编写目的 1 1.3 关于Android 1 1.4 关于MVC框架 3 2 可行性研究 6 2.1 技术可行性 6 2.2 经济可行性 6 2.3 时间可行性 6 3 需求分析 7 4 总体设计 8 …

栈——算法专项刷题(六)

六、栈 6.1后缀表达式 原题链接 根据 逆波兰表示法&#xff0c;求该后缀表达式的计算结果。 有效的算符包括 、-、*、/ 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 说明&#xff1a; 整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话…

【kafka】五、kafka工作流程

kafka工作流程 工作流程 kafka中消息是以topic进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向topic的。 topic是逻辑上的概念&#xff0c;而partition是物理上的概念&#xff0c;每一个partition对应一个log文件&#xff0c;该log文件…

基建融资与预算软约束(2015年A股大牛市与“流动性堰塞湖”)-中国视角下的宏观经济

基建融资与预算软约束(2015年A股大牛市与“流动性堰塞湖”) – 潘登同学的宏观经济学笔记 文章目录基建融资与预算软约束(2015年A股大牛市与“流动性堰塞湖”) -- 潘登同学的宏观经济学笔记2015年A股大牛市定向宽松的货币政策导向定向宽松的货币政策原因投资项目的预算软约束政…

python基础之循环嵌套

文章目录一、break和continue二、while的循环嵌套知识点print:例题1打印星星&#xff1a;例题2打印九九乘法表一、break和continue break当某一条件满足时直接跳出当前循环&#xff1b; continue当某一条满足时&#xff0c;不执行后续循环重新开始新一轮循环&#xff1b; i1 …

[附源码]java毕业设计婴幼儿玩具共享租售平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

python基础之字典

文章目录一、字典1.dictionary(字典)2.和列表的区别&#xff1a;二、实例三、应用场景一、字典 1.dictionary(字典) 是除了列表之外最灵活的数据类型&#xff0c;字典同样可以用来存储多个数据&#xff08;通常用于存储描述一个物体的相关信息&#xff09;&#xff1b; 2.和…