如何在给定字符串中找到出现次数最多的字符?

简介: 【8月更文挑战第23天】

简介

在给定字符串中找到出现次数最多的字符是一个常见的面试问题。有几种算法可以解决这个问题,包括:

1. 哈希表

哈希表是一种数据结构,它将键映射到值。我们可以使用哈希表来存储字符及其出现次数。遍历字符串并更新哈希表中每个字符的计数。然后,我们可以遍历哈希表并找到具有最大计数的字符。

示例:

import java.util.HashMap;
import java.util.Map;

public class Example {
   
    public static void main(String[] args) {
   
        String str = "Hello world";
        Map<Character, Integer> charCount = new HashMap<>();

        // 遍历字符串并更新字符计数
        for (char c : str.toCharArray()) {
   
            int count = charCount.getOrDefault(c, 0);
            charCount.put(c, count + 1);
        }

        // 找到具有最大计数的字符
        char maxChar = ' ';
        int maxCount = 0;
        for (Map.Entry<Character, Integer> entry : charCount.entrySet()) {
   
            if (entry.getValue() > maxCount) {
   
                maxChar = entry.getKey();
                maxCount = entry.getValue();
            }
        }

        System.out.println("出现次数最多的字符:" + maxChar);
        System.out.println("出现次数:" + maxCount);
    }
}

输出:

出现次数最多的字符:l
出现次数:3

2. 数组

我们可以使用一个大小为 256 的数组来存储字符及其出现次数。遍历字符串并增加相应索引处的计数。然后,我们可以遍历数组并找到具有最大计数的字符。

示例:

public class Example {
   
    public static void main(String[] args) {
   
        String str = "Hello world";
        int[] charCount = new int[256];

        // 遍历字符串并更新字符计数
        for (char c : str.toCharArray()) {
   
            charCount[c]++;
        }

        // 找到具有最大计数的字符
        char maxChar = ' ';
        int maxCount = 0;
        for (int i = 0; i < 256; i++) {
   
            if (charCount[i] > maxCount) {
   
                maxChar = (char) i;
                maxCount = charCount[i];
            }
        }

        System.out.println("出现次数最多的字符:" + maxChar);
        System.out.println("出现次数:" + maxCount);
    }
}

输出:

出现次数最多的字符:l
出现次数:3

3. 排序

我们可以将字符串转换为字符数组,然后对数组进行排序。排序后的数组将具有按出现次数递减排列的字符。我们可以获取数组中的第一个字符作为出现次数最多的字符。

示例:

import java.util.Arrays;

public class Example {
   
    public static void main(String[] args) {
   
        String str = "Hello world";

        // 将字符串转换为字符数组
        char[] chars = str.toCharArray();

        // 对字符数组进行排序
        Arrays.sort(chars);

        // 获取出现次数最多的字符
        char maxChar = chars[chars.length - 1];

        // 计算出现次数
        int maxCount = 1;
        for (int i = chars.length - 2; i >= 0; i--) {
   
            if (chars[i] == maxChar) {
   
                maxCount++;
            } else {
   
                break;
            }
        }

        System.out.println("出现次数最多的字符:" + maxChar);
        System.out.println("出现次数:" + maxCount);
    }
}

输出:

出现次数最多的字符:l
出现次数:3

结论

有三种主要算法可以找到给定字符串中出现次数最多的字符:哈希表、数组和排序。哈希表通常是最佳选择,因为它提供了 O(n) 的时间复杂度和 O(n) 的空间复杂度。

目录
相关文章
|
存储 缓存 监控
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出 本文来带大家学习Java OOM的三大经典场景以及解决方案,保证让你有所收获!
6676 2
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
|
缓存 JSON 前端开发
CORS 详解,终于不用担心跨域问题了
CORS 详解,终于不用担心跨域问题了
9165 1
CORS 详解,终于不用担心跨域问题了
|
5月前
|
人工智能 监控 Java
零代码改造 + 全链路追踪!Spring AI 最新可观测性详细解读
Spring AI Alibaba 通过集成 OpenTelemetry 实现可观测性,支持框架原生和无侵入探针两种方式。原生方案依赖 Micrometer 自动埋点,适用于快速接入;无侵入探针基于 LoongSuite 商业版,无需修改代码即可采集标准 OTLP 数据,解决了原生方案扩展性差、调用链易断链等问题。未来将开源无侵入探针方案,整合至 AgentScope Studio,并进一步增强多 Agent 场景下的观测能力。
2442 74
|
机器学习/深度学习 数据可视化 Python
R语言使用逻辑回归Logistic、单因素方差分析anova、异常点分析和可视化分类iris鸢尾花数据集|数据分享
R语言使用逻辑回归Logistic、单因素方差分析anova、异常点分析和可视化分类iris鸢尾花数据集|数据分享
|
存储 编解码 JSON
解决浏览器存储问题,不得不了解的cookie、localStorage和sessionStorage
该文章详细对比了浏览器存储机制中的cookie、localStorage和sessionStorage的不同之处,以及各自的适用场景。
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
685 4
|
消息中间件 存储 Java
吃透 RocketMQ 消息中间件,看这篇就够了!
本文详细介绍 RocketMQ 的五大要点、核心特性及应用场景,涵盖高并发业务场景下的消息中间件关键知识点。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
吃透 RocketMQ 消息中间件,看这篇就够了!
|
Kubernetes 架构师 Java
史上最全对照表:大厂P6/P7/P8 职业技能 薪资水平 成长路线
40岁老架构师尼恩,专注于帮助读者提升技术能力和职业发展。其读者群中,多位成员成功获得知名互联网企业的面试机会。尼恩不仅提供系统化的面试准备指导,还特别针对谈薪酬环节给予专业建议,助力求职者在与HR谈判时更加自信。此外,尼恩还分享了阿里巴巴的职级体系,作为行业内广泛认可的标准,帮助读者更好地理解各职级的要求和发展路径。通过尼恩的技术圣经系列PDF,如《尼恩Java面试宝典》等,读者可以进一步提升自身技术实力,应对职场挑战。关注“技术自由圈”公众号,获取更多资源。
|
JavaScript 前端开发 API
vue2 /vue3【nextTick】的使用方法及实现原理,一文全搞懂!
vue2 /vue3【nextTick】的使用方法及实现原理,一文全搞懂!

热门文章

最新文章