连续字母长度 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。

输入描述

第一行有一个字符串(1<长度≤1000001<长度≤100000),只包含大写字母 第二行为 k 的值

输出描述

输出连续出现次数第 k 多的字母的次数,当第k多的字母的次数不存在时,请输出-1

示例1

输入:
AAAAHHHBBCDHHHH
3输出:
1说明:
同一字母连续出现的最多的是 A 和 H ,四次 第二多的是 H,3 次,但是H 已经存在 4 个连续的,故不考虑下个最长子串是 BB,所以最终答案应该输出2.

示例2

输入:
AABAAA
2输出:
1说明:
同一字母连续出现的最多的是 A,三次, 第二多的还是A,两次,但A已经存在最大连续次数三次 故不考虑; 下个最长子串是 B,所以输出 1。

示例3

输入:
ABC
4输出:
-1说明:
只含有 3 个包含同一字母的子串,小于 k,输出 −1。

示例4

输入:
ABC
2输出:
1说明:
三个子串长度均为1,所以此时 k=1,k=2,k=3 这三种情况均输出 1。特此说明,避免歧义。

题解

解题思路:

  1. 遍历字符串,统计相同字母的连续子串的长度。
  2. 使用数组 cnt 记录每个字母最长子串的长度,其中 cnt[i] 表示字母 A + i 的最长子串长度。
  3. 使用集合 scnt 进行去重处理,记录所有不同的子串长度。
  4. 判断集合 scnt 的大小,如果小于 k,则输出 -1,表示不存在第 k 多的字母。
  5. 否则,将数组 cnt 排序,输出第 26 - k 个元素,即第 k 多的字母的最长子串长度。

Java

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s = in.next();int k = in.nextInt();// 相同字母取最长的那个子串长度// cnt[1] 表示 'B' 最长的子串长度int[] cnt = new int[26];int n = s.length();for (int i = 0; i < n; ) {int j = i + 1;while (j + 1 < n && s.charAt(j) == s.charAt(i)) j++;int idx = s.charAt(i) - 'A';cnt[idx] = Math.max(cnt[idx], j - i);i = j;}// 去重处理Set<Integer> scnt = new HashSet<>();for (int i = 0; i < 26; i++) {if (cnt[i] > 0) {scnt.add(cnt[i]);}}if (scnt.size() < k) {System.out.println(-1);} else {// 排序长度Arrays.sort(cnt);System.out.println(cnt[26 - k]);}}
}

Python

# 相同字母取最长的那个子串长度
# cnt[1] 表示 'B' 最长的子串长度
cnt = [0] * 26# 输入字符串和k值
s = input()
k = int(input())n = len(s)
i = 0
while i < n:j = i + 1while j + 1 < n and s[j] == s[i]:j += 1idx = ord(s[i]) - ord('A')cnt[idx] = max(cnt[idx], j - i)i = j# 去重处理
scnt = set([cnt[i] for i in range(len(cnt)) if cnt[i] > 0])if len(scnt) < k:print(-1)
else:# 排序长度cnt.sort()print(cnt[26 - k])

C++

#include <bits/stdc++.h>
using namespace std;int main(){string s;int k;cin >> s;cin >> k;// 相同字母取最长的那个子串长度// cnt[1] 表示 'B' 最长的子串长度int cnt[26] = {0};int n = s.length();for(int i=0;i<n;){int j = i + 1;while(j + 1 < n && s[j] == s[i]) j++;int idx = s[i] - 'A';cnt[idx] = max(cnt[idx], j - i);i = j;}// 去重处理set<int> scnt;for(int i=0;i<26;i++){if(cnt[i] > 0) scnt.insert(cnt[i]);}if(static_cast<int>(scnt.size()) < k){cout << -1 << endl;}else{// 排序长度sort(cnt, cnt + 26);cout << cnt[26 - k] << endl;}return 0;
}

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

【C++】初始化列表、static成员、友元、匿名对象、附练习题

文章目录 前言一、构造函数【初始化列表】1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 友元函数3.2 内部类 四、匿名对象4.1 拷贝对象时的一些编译器优化 五、再次理解类和对象六、练习题6.1 求123...n&#xff0c;要求不…

Apipost多host服务配置如何使用

最近Apipost新增同环境下多host服务的配置功能&#xff0c;本篇文章带来该功能的使用场景及使用方法。 配置方法&#xff1a; 点击右上角眼睛标识进入环境管理 点击添加服务&#xff0c;输入服务名和URL 配置完成后需要在接口目录中选择该目录下需要使用的host服务&#xff0…

搭建SVN服务端和客户端

参考博客&#xff1a; https://zhuanlan.zhihu.com/p/428552058 先下载这两个文件&#xff1a; 链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1_1v_jKm3h7ZDSYEsgYyovA?pwd11ku 提取码&#xff1a;11ku –来自百度网盘超级会员V5的分享 第一个压缩包里有客户端…

[AIGC] JVM内存结构

JVM内存结构 Java虚拟机&#xff08;JVM&#xff09;内存结构是Java内存管理的基础&#xff0c;并且与JVM的运行机制紧密相关。下面是一个JVM内存结构的示意图&#xff1a; JVM内存主要包括以下几个部分&#xff1a; 方法区&#xff08;Method Area&#xff09; 方法区也被称…

计算机网络-广域通信网

1.广域网概念和分类 什么是广域网&#xff1f; 广域网是指长距离跨地区的各种局域网、计算机、终端互联在一起&#xff0c;组成一个资源共享的通信网络。 广域网分为传统广域网和现代广域网。 传 统 广 域 网公共交换电话网PSTN公共数据网X.25帧中继网FR综合业务数据网ISDN…

docker容器常见操作

目录 一、认识容器 1.1、docker用到的内核技术 1.2、namespace 1.3、Control Group 1.4、LXC与docker区别 二、docker环境准备 2.1、安装docker 2.2、docker daemon环境管理 三、镜像、容器和仓库 3.1、镜像常见操作 3.2、配置镜像加速器 命名空间 3.3、非官方镜像仓…

绩效域-错题笔记

1、虚荣指标&#xff1a;对决策没有帮助的度量指标一般属于虚荣指标。 例如&#xff1a;新访问者的数量比网站的页面访问量更加有用。 2、完工偏差(VAC)用于预测预算赤字或盈余金额&#xff0c;它表示为完工预算(BAC)和完工估算(EAC)之差。 3、完工尚需绩效指数(TCPI)用于估…

【服务器】服务器推荐

一、引言 在数字世界的浪潮中&#xff0c;服务器作为数据存储和处理的基石&#xff0c;其重要性不言而喻。而在这个繁星点点的市场中&#xff0c;雨云以其独特的优势和超高的性价比&#xff0c;逐渐成为众多企业和个人的首选。今天&#xff0c;就让我带你走进雨云的世界&#…

QT day2 2.21

1.使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 代码&#xff1a; #include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(pa…

Open3D0.18.0使用教程

目录 写在前面准备Open3D使用demo编译demo运行demo相关说明 参考完 写在前面 1、本文内容 Open3D在0.15版之后&#xff0c;提供编译好的包&#xff0c;本文是以最新版(截止202402&#xff0c;0.18.0)为例的Open3D使用教程&#xff1b; Open3D其他版本的编译和使用相关教程&…

【安卓基础2】简单控件

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职。 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频链接 &#xff08;他们的视频后面一部分没再更新&#xff0c;看看前面…

你好,iLogtail 2.0!

作者&#xff1a;张浩翔&#xff08;笃敏&#xff09; 概述 随着可观测数据采集需求的不断推陈出新&#xff0c;多样化的数据输入输出选项、个性化的数据处理能力组合、以及高性能的数据处理吞吐能力已经成为顶流可观测数据采集器的必备条件。然而&#xff0c;由于历史原因&a…

基于RHEL8部署Zabbix6.0,监控不再困难!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

C# WPF 桌面应用程序使用 SQlite 数据库

我们在开发 WPF 桌面应用程序时&#xff0c;数据库存的使用是必不可少的&#xff0c;除非你的应用没有数据存储的需求&#xff0c;有了数据存储需求&#xff0c;我们就会面临使用什么样的数据库的选择问题&#xff0c;我的选择方案是&#xff0c;单机版的应用我优先选择 Sqlite…

逻辑回归为什么使用交叉熵而不用均方差?

逻辑回归为什么使用交叉熵而不用均方差&#xff1f;或者说逻辑回归的损失函数为什么不用最小二乘&#xff1f; 下面主要从两个角度进行阐述&#xff1a; 从逻辑回归的角度出发&#xff0c;逻辑回归的预测值是一个概率&#xff0c;而交叉熵又表示真实概率分布与预测概率分布的…

基于springboot+vue的高校学科竞赛系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Kubernetes(K8s)的基础概念

K8s的概念 K8S 的全称为 Kubernetes (K12345678S) &#xff08;简化全称&#xff09; Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于 管理容器化工作负载和服务&#xff0c;有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。Kubernetes 服务、支持和…

时钟芯片RTC介绍

1. 工作原理 实时时钟&#xff08;Real_Time Clock&#xff09;简称为RTC&#xff0c;主要为各种电子系统提供时间基准&#xff0c;MCU、MPU、CPU均离不开RTC电路设计。通常把集成于芯片内部的RTC称为片内RTC&#xff0c;在芯片外扩展的RTC称为外部RTC。时钟芯片(RTC&#xff0…

一文读懂——SSL证书选择免费还是付费

免费SSL证书通常由一些知名的证书颁发机构&#xff08;CA&#xff09;提供。这些免费证书提供了基本的加密功能&#xff0c;足以保护网站的数据传输安全。它们的优点在于免费&#xff0c;对于个人网站或小型企业来说&#xff0c;可以有效地降低网站运营成本。 然而&#xff0c;…

小程序--自定义组件

一、创建自定义组件 .js中注册Component函数 .json使用"component": true Component({}) {"component": true } 二、使用自定义组件 全局配置、页面配置均可&#xff0c;全局配置就写在app.json中&#xff0c;页面配置就写在页面对应的json中。 配置之后…