华为机试:获取字符串中连续出现次数第k多的字母的次数

2023-11-09

题目描述

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

输入描述

第一行有一个子串(1<长度<=100),只包含大写字母。
第二行为 k的值。

输出描述

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

示例1

输入

AAAAHHHBBCDHHHH
3

输出

2


说明
同一字母连续出现的最多的是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。特此说明,避免歧义。
备注:若子串中只包含同一字母的子串数小于k,则输出-1。

思路分析

  • 相同字母只取最长的那个子串
  • 输出连续出现次数第k多的字母的次数。

参考代码

注:题目网上找的,参考代码是练习用,仅供参考,并不保证用例通过率。

import java.util.*;

/**
 * 获取字符串中连续出现次数第k多的字母的次数
 */
public class Test0015 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        char[] chars = (scanner.nextLine()).toCharArray();
        int k = scanner.nextInt();

        Map<Character, Integer> map = new HashMap<>();

        char curChar = chars[0];
        char tempChar;
        int count = 0;
        for (int i = 0; i < chars.length; i++) {
            tempChar = chars[i];
            if (tempChar == curChar) {
                // 相等,数量加1
                count++;
            } else {
                // 重置统计参数
                curChar = tempChar;
                count = 1;
            }

            // 记录
            if (map.containsKey(curChar)) {
                map.put(curChar, Math.max(map.get(curChar), count));
            } else {
                map.put(curChar, count);
            }
        }

        // 根据次数排序,从高到底
        List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
        list.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));

        // 打印第k多次的子串字母出现次数
        if (k > list.size()) {
            System.out.println(-1);
        } else {
            System.out.println(list.get(k - 1).getValue());
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为机试:获取字符串中连续出现次数第k多的字母的次数 的相关文章

随机推荐

  • 力扣 3. 无重复字符的最长子串

    一 题目 二 示例 三 思路与代码 1 思路 1 采用滑动窗口算法 2 滑动窗口收缩的关键 当当前移入窗口的字符其计数已经超过1时 则进行窗口的收缩 3 无重复子串长度更新的时机 当窗口中没有重复字符时 更新长度 4 具体见代码解析 2 代
  • 红黑树——RBTree

    红黑树的概念 红黑树 是一种二叉搜索树 但是 在每个节点上增加一个存储位表示节点的颜色 可以是red或者black 通过对任何一条从根到叶子的路径上各个节点着色方式的限制 红黑树确保没有一条路径会比其他路径长出两倍 因而是接近平衡的 红黑树
  • ngrok实现内网穿透,让家里的笔记本也能做服务器

    背景 家里淘汰了一台笔记本 windows系统装起来很卡 于是装了个linux系统 这台笔记本有2G内存 奔腾双核处理器 配置比我在阿里云上买的ECS高多了 于是想着给它利用起来 研究了一下 发现ngrok内网穿透能实现这个功能 刚好我也有
  • 临界区锁 InitializeCriticalSection()

    首先 文章主体经过以下两篇文章整理而成 http blog csdn net lys07962000 article details 41707213 http blog csdn net bytxl article details 465
  • char** 和const char** 问题

    目录 1 char 和const char 问题 2 NUL和NULL问题 3 sizeof返回值问题 4 malloc下的strlen问题 1 char 和const char 问题 今天看书看到一个很有意思的问题 不过在看问题之前 首先
  • 求最短回文串长度

    今天写了一道题 是这个题噢 让求最短回文串长度 我用马拉车写了半天呢 写着写着想 马拉车求得不是最长回文串的长度吗 然后看了一下题解 因为这题数据量不大 所以这样直接就过了 include
  • 基于c语言实现 字符串排序

    基于c语言实现 字符串排序 一 简单的字符串排序 举例实现 题目 代码 一 简单的字符串排序 给定有限个字符串 将其按照大小顺序排列 此时的大小顺序简单来说我们可以先认为是ASCLL码的大小顺序 由此我们只需要比较字符串的ASCLL码的大小
  • 统计数据上的因果推断--关于Yule-Simson Paradox

    在 高 维 列 联 表 分 析 中 有 一 个 很 有 名 的 例 子 叫 做 Yule SimpsonParadox 此悖论表明 X和 Y 边缘上正相关 但是给定另外一个变量 Z后 在 Z的每一个水平上 X和 Y可能负相关 下面表 1 就
  • ChatGPT常用的指令(prompts)系列十——房地产经纪人、物流人员、牙医、网站设计

    系列文章目录 内容翻译自 https github com f awesome chatgpt prompts 并加入自己的实践内容 1 ChatGPT常用的提示语 prompts 系列一 2 ChatGPT常用的提示语 prompts 系
  • rancher 与 kubernetes的关系(1)

    rancher 和 kubernetes 有什么区别 总体来说 rancher 和 k8s 都是用来作为容器的调度与编排系统 但是rancher不仅能够管理应用容器 更重的一点是能够管理k8s集群 rancher2 x 底层基于k8s调度引
  • TCP连接、Http连接与Socket连接的区别

    文章目录 HTTP Socket TCP的区别 Socket 套接字 Socket长连接 什么时候用长连接 短连接 TCP连接和HTTP连接的区别 TCP连接与Socket连接的区别 HTTP连接与Socket连接的区别 常见问题 什么时候
  • 嵌入式岗位Makefile常见面试题(1)

    第一题 变量使用 解析 Makefile中变量的引用格式就是 变量名 这是没什么好讲的 记住就行 在Makefile中有一些特殊的宏定义需要记住 表示生成的目标 lt 表示生成依赖的文件 是执行上一条指令的返回值 可以参考博客 Makefi
  • IPv6 时代如何防御 DDoS 攻击?

    在互联网世界 每台联网的设备都被分配了一个用于标识和位置定义的 IP 地址 20 世纪 90 年代以来互联网的快速发展 联网设备所需的地址远远多于可用 IPv4 地址的数量 导致了 IPv4 地址耗尽 因此 协议 IPv6 的开发和部署已经
  • devC++强制关机代码shutdown(DAY 26)

    文章目录 1 代码实现 2 运行结果 恶搞同学 这种方式只用改个头文件 再在文章中间加一行输出即可 1 代码实现 2 运行结果 恶搞同学 增加编程乐趣 这种方式只用改个头文件 再在文章中间加一行输出即可
  • MMDetection——GPU训练

    预先知识 CONFIG FILE config 里面的文件 config faster rcnn r50 fpn 1x coco py CHECKPOINT FILE 模型权重所在位置 checkpoints faster rcnn r50
  • elk笔记17--alias

    elk笔记17 alias 1 别名简介 2 创建别名 2 1 创建索引时候创建别名 2 2 为已有索引添加别名 3 查看索引 4 删除别名 4 1 直接删除别名 4 2 使用actions删除别名 5 说明 1 别名简介 索引 别名 就像
  • 【已解决】NFS客户端写入NFS共享文件夹出错:Permission denied

    原文地址 https www crifan com nfs client write to nfs server share folder error permission denied 背景 折腾 已解决 在远程Ubuntu服务器中开通N
  • 求众数

    示例 1 输入 3 2 3 输出 3 示例 2 输入 2 2 1 1 1 2 2 输出 2 vector声明与调用方法 vector
  • hexo更换icarus主题和美化

    文章目录 页面点击出现爱心 给文章添加目录 添加相册 模块布局 开启评论系统 valine域名绑定 开启打赏功能 全局搜索 首页三栏 阅读两栏 目录固定 默认开启目录 个人信息布局 移动端优化 增加版权说明 增加busuanzi统计 使用阿
  • 华为机试:获取字符串中连续出现次数第k多的字母的次数

    题目描述 给定一个字符串 只包含大写字母 求在包含同一字母的子串中 长度第 k 长的子串的长度 相同字母只取最长的那个子串 输入描述 第一行有一个子串 1 lt 长度 lt 100 只包含大写字母 第二行为 k的值 输出描述 输出连续出现次