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

简介: 【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) 的空间复杂度。

目录
相关文章
|
3月前
|
存储 Java 数据处理
|
3月前
|
算法 Java
LeetCode第28题找出字符串中第一个匹配项的下标
这篇文章介绍了LeetCode第28题"找出字符串中第一个匹配项的下标"的两种解法:暴力解法和KMP算法,并解释了KMP算法通过构建前缀表来提高字符串搜索的效率。
LeetCode第28题找出字符串中第一个匹配项的下标
|
6月前
|
算法 测试技术 编译器
【算法 | 实验18】在字符矩阵中查找给定字符串的所有匹配项
题目描述 题目 在字符矩阵中查找给定字符串的所有匹配项 给定一个M×N字符矩阵,以及一个字符串S,找到在矩阵中所有可能的连续字符组成的S的次数。所谓的连续字符,是指一个字符可以和位于其上下左右,左上左下,右上右下8个方向的字符组成字符串。用回溯法求解。
96 1
|
5月前
leetcode题解:28.找出字符串中第一个匹配项的下标
leetcode题解:28.找出字符串中第一个匹配项的下标
26 0
|
6月前
|
索引 容器
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
|
算法
LeetCode:28. 找出字符串中第一个匹配项的下标
题目描述:给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
|
C语言
查找某字符串出现的位置,并且输出该第一个字母所在的位
查找某字符串出现的位置,并且输出该第一个字母所在的位
135 0
查找某字符串出现的位置,并且输出该第一个字母所在的位
|
Java
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
117 0
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
|
算法 Java C语言
找出字符串中第一个匹配项的下标 (LeetCode 28)
找出字符串中第一个匹配项的下标 (LeetCode 28)
200 0