【华为上机真题】连续字母长度

news2025/1/12 9:58:24

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

1.3 测试样例

1.3.1 示例 1

1.3.2 示例 2

1.3.3 示例 3

1.3.4 示例 4

二、解题思路

三、代码实现

四、时间复杂度


一、题目描述

给定一个字符串,只包含大写字母,求在包含同一个字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。若子串中只包含同一个字母的子串数小于 k,则输出 -1。

1.1 输入描述

第一行有一个字符串(1 < 长度 < 100),只包含大写字母。

第二行有一个数字,表示 k 的值。

1.2 输出描述

输出连续出现次数第 k 多的字母的次数。

1.3 测试样例

1.3.1 示例 1

输入

AAAAHHHBBCDHHHH
3

输出

2

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

1.3.2 示例 2

输入

AABAAA
2

输出

1

说明:同一字母连续出现的最多的是A,3次;第二多的还是A,两次,但是A已经出现过了,故不考虑;第二个最长子串是B,它的长度是1,所以输出1

1.3.3 示例 3

输入

ABC
4

输出

-1

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

1.3.4 示例 4

输入

ABC
2

输出

1

说明:三个子串长度均为 1,所以此时k=1、k=2、k=3 这三种情况均输出 1。

二、解题思路

本题属于简单题,步骤如下所示:

(1)首先,需要统计出连续字符的长度;

(2)然后,根据长度对其逆序排序;

(3)最后,取第 k 长的字符,如果没有则输出 -1。

三、代码实现

代码实现如下所示。

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

int consecutiveLetterLength(string str, int k)
{
    int n = str.length();
    map<char, int>mp;
    mp[str[0]] = 1;
    int num = 1;
    for (int i = 1; i < n; ++i) {
        if (str[i] == str[i - 1]) {
            num++;
        } else {
            mp[str[i-1]] = num;
            num = 1;
        }
    }

    if ((int)mp.size() < k) {
        return -1;
    }

    vector<pair<char, int> > g;
    for (auto i = mp.begin(); i != mp.end(); ++i) {
        g.push_back(pair<char, int>(i->first, i->second));
    }

    sort(g.begin(), g.end(),
         [](pair<char, int> a, pair<char, int> b){return a.second > b.second;});

    return g[k - 1].second;
}

int main()
{
    int k;
    string str;
    while (cin>>str>>k) {
        int ans = consecutiveLetterLength(str, k);
        cout<<ans<<endl;
    }
    return 0;
}

四、时间复杂度

时间复杂度:O(n + m + mlogm)。

在上述代码中,第一个 for 循环时间复杂度为 O(n),第二个 for 循环时间复杂度为 O(m),sort 排序的时间复杂度为 O(mlogm),所以总的时间复杂度为O(n + m + mlogm),其中 n >= m。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


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

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

相关文章

C语言--指针初阶

目录什么是指针&#xff1f;指针变量指针类型指针类型的意义在数组中举例野指针概念野指针成因如何规避野指针指针运算指针-整数指针关系运算指针-指针应用(求字符串长度)结语什么是指针&#xff1f; 在计算机科学中&#xff0c;指针&#xff08;Pointer&#xff09;是编程语言…

直接在Notepad++中运行GO

1.Windows上安装Go语言开发包参考链接&#xff1a;http://c.biancheng.net/view/3992.html1.1.下载Go语言开发包可以在Go语言官网 &#xff08;https://golang.google.cn/dl/&#xff09; 下载Windows 系统下的Go语言开发包&#xff0c;如下图所示。这里我们下载的是64 位的开发…

深度学习:轻量级神经网络MobileNet 从v1 到v2

深度学习&#xff1a;轻量级神经网络MoblieNet 从v1 到 v2MobileNet V1前言深度可分离卷积传统卷积Depth Wise ConvPoint Wise Conv性能对比MobileNet V2前言主要改进Inverted Residuals BlockResidual BlockExpansion LayerReLU6Linear Activation Function小结实验MobileNet …

大年初二、初三—— 牛客网刷题经验分享~

2023年大年初二、初三 —— 牛客网刷题经验分享~&#x1f60e;大年初初二、初三 —— 牛客网刷题经验分享~&#x1f60e;)前言&#x1f64c;牛客网——基础语法【循环输出图形篇】&#x1f64c;BC98 线段图案 &#x1f64c;BC99 正方形图案 &#x1f64c;BC100 直角三角形图案 …

计算机毕业设计选题推荐之Springboot校园篮球足球竞赛预约平台-Vue

&#xff0c;本系统分为用户和管理员两个角色&#xff0c;其中用户可以在线注册登陆&#xff0c;查看平台公告&#xff0c;查看篮球比赛介绍&#xff0c;在线预约参加篮球比赛。管理员可以对用户信息&#xff0c;比赛项目&#xff0c;比赛分类&#xff0c;平台公告信息等进行管…

Linux中如何给普通用户提权

引言&#xff1a; 北京时间2023/1/26/11:00 &#xff0c;看到这个日期&#xff0c;我第一时间想到的是还有十几天就要开学啦&#xff01;开学我是向往的&#xff0c;但是我并不怎么向往开学的考试&#xff0c;比如什么毛概和什么信息技术&#xff0c;可能是我深知自己在这些课…

实现自己的数据库一

一 前言从上篇原创文章到现在又是新的一年&#xff0c;今天是2023年的大年初三&#xff0c;先在这里祝各位亲爱的老铁们新年快乐&#xff0c;身体健康&#xff0c;在新的一年里更帅气、更漂亮&#xff0c;都能完成自己的小目标。一直以来&#xff0c;我对数据存储还是比较感兴趣…

卓有成效的用例设计方法

持续坚持原创输出&#xff0c;点击蓝字关注我吧用例设计作为测试工程师的立身之本&#xff0c;是衡量测试工程师综合素质的重要参考&#xff0c;时间是测试工作中重要的测试资源&#xff0c;通过设计高质量的测试用例可以有效地提升测试效率。本文旨在介绍测试工作中常用的五种…

恶意代码分析实战 18 64位

18.1 Lab21-01 当你不带任何参数运行程序时会发生什么&#xff1f; 当你运行这个程序却没带任何参数&#xff0c;它会立即退出。 根据你使用的IDAPro的版本&#xff0c;main函数可能没有被自动识别&#xff0c;你如何识别对main函数的调用&#xff1f; main函数有三个参数入…

NodeJS 中 Express 之中间件

NodeJS 中 Express 之中间件参考描述中间件next()一个简单的中间件函数使用全局中间件局部中间件共享注意事项位置next()分类错误级中间件内置中间件express.urlencoded()express.json()第三方中间件参考 项目描述哔哩哔哩黑马程序员搜索引擎Bing 描述 项目描述Edge109.0.151…

【web前端】盒子模型

border 边框 content 内容 padding内边距 margin外边距 1.边框 border 边框粗细 用px作为单位 border-style &#xff1a; solid 实线的 dashed虚线的 dotted 点的 边框的符合写法&#xff1a; 那三个没有先后顺序 边框可以分开写 表格的细线边框 border-collapse …

【编程入门】开源记事本(微信小程序版)

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记&#xff0c;将更为简化&#xff0c;去掉了网络调用&#xff0…

20230126英语学习

Your Dog’s Behavior Is a Product of Their Genes 狗狗做什么&#xff0c;基因来决定 这篇好难&#xff0c;字基本都认识&#xff0c;但它不认识我~ “Identification of the genes behind dog behavior has historically been challenging,” says first author Emily Dut…

【计算机网络(考研版)】第一站:计算机网络概述(一)

目录 一、计算机网络的概念 1.计算机网络的定义 2.计算机网络的组成 3.计算机网络的功能 4.计算机网络的分类 二、计算机网络的性能指标 1.速率 2.带宽 3.时延 4.时延带宽积 5.往返时间 6.利用率 三、计算机网络的体系结构 1.体系结构 2.协议 3.服务 4.接口&a…

活动星投票优秀支书网络评选微信的投票方式线上免费投票

“优秀支书”网络评选投票_多人投票流程顺序_视频投票图文投票_微信比赛投票小程序近些年来&#xff0c;第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放&#xff0c;更多人选择微信投票小程序平台&#xff0c;因为…

最详细、最仔细、最清晰的几道python习题及答案(建议收藏哦)

名字&#xff1a;阿玥的小东东 学习&#xff1a;python。c 主页&#xff1a;没了 今天阿玥带大家来看看更详细的python的练习题 目录 1. 在python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景? 2. 静态函数, 类函数, 成员函数、属性函数的区别? 2.1静态…

Unix\Linux多线程复健(二)线程同步

线程同步 并非让线程并行&#xff0c;而是有先后的顺序执行&#xff0c;当有一个线程对内存操作时&#xff0c;其他线程不可以对这个内存地址操作 线程之间的分工合作 线程的优势之一&#xff1a;能够通过全局变量共享信息 临界区&#xff1a;访问某一共享资源的代码片段&#…

【JavaEE初阶】第六节.多线程 (基础篇 )线程安全问题(下篇)

前言 一、内存可见性 二、内存可见性的解决办法 —— volatile关键字 三、wait 和notify 关键字 3.1 wait() 方法 3.2 notify() 方法 3.3 notify All() 方法 3.4 wait 和 sleep 的对比 总结 前言 本节内容接上小节有关线程安全问题&#xff1b;本节内容我们将介绍有关…

CUDA编程笔记(6)

文章目录前言全局内存的访问模式合并访问和非合并访问使用全局内存进行矩阵转置矩阵复制矩阵转置总结前言 全局内存的合理使用 全局内存的访问模式 合并访问和非合并访问 合并访问指的是一个线程束&#xff08;同一个线程块中相邻的wrapSize个线程。现在GPU的内建变量wrapSi…

Linux系统之网络客户端工具

Linux系统之网络客户端工具一、Links工具1.Links工具介绍2.安装Links软件3.Links工具的使用4.打印网页源码输出5.打印url版本到标准格式输出二、wget工具1.wget工具介绍2.安装wget软件3.wget工具的使用三、curl工具1.curl工具的介绍2.curl的常用参数3.curl的基本使用四、scp工具…