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

简介: 【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月前
|
Java
给定一个字符串数组,如何找到其中最长的回文子串?
【4月更文挑战第13天】Java动态规划解题:找出字符串数组中最长的回文子串。代码中,`longestPalindrome`函数遍历数组,利用`expandAroundCenter`方法检测以每个字符为中心的回文串并更新最长长度。当遍历完所有字符串后,返回最长回文子串。
45 6
|
6月前
|
索引 容器
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
|
Python
统计字符串中不同字符个数问题
统计字符串中不同字符个数问题
123 0
|
算法
给定m个不重复的字符 [a,b,c,d],以及一个长度为n的字符串tbcacbdata滑动窗口
给定m个不重复的字符 [a,b,c,d],以及一个长度为n的字符串tbcacbdata滑动窗口
229 0
|
算法
LeetCode:28. 找出字符串中第一个匹配项的下标
题目描述:给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
|
C语言
查找某字符串出现的位置,并且输出该第一个字母所在的位
查找某字符串出现的位置,并且输出该第一个字母所在的位
131 0
查找某字符串出现的位置,并且输出该第一个字母所在的位
|
Java
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
116 0
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
|
算法 Java C语言
找出字符串中第一个匹配项的下标 (LeetCode 28)
找出字符串中第一个匹配项的下标 (LeetCode 28)
199 0