news 2026/7/22 15:56:04

卡码网Java基础课--哈希表基础(1)--出现频率最高的字母例题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
卡码网Java基础课--哈希表基础(1)--出现频率最高的字母例题

在刷题的时候你会发现,对于数组和字符串的题目,经常会用到哈希表这个知识点。那么什么是哈希表,或者说哈希表的定义又是啥,如果你去网上查,会有很多关于哈希表的定义,这里我们不再阐述哈希表的定义。

哈希表来解决问题的时候,一般选择以下三种数据结构。

  • 数组
  • set集合
  • map映射

本篇先说数组:通过数组来使用哈希表的知识,也就可以说是哈希数组,什么哈希数组?

举个例子:给定一个数组A,根据数组A来解决一个问题。

为解决问题,我们 新建一个数组B,把数组A的值作为数组B的索引,数组B就是哈希数组。

通俗的讲,哈希数组就是把一个数组的值作为自己的索引,这个数组就是哈希数组,后续对哈希数组进行什么操作,根据题意进行模拟就行。

什么时候使用哈希表这个知识点呢,大多数情况下,当题目中出现重复元素的时候,就应该考虑是否可以使用哈希表来解决问题。

例题:出现频率最高的字母。

这道例题很好的诠释了哈希表的基本概念,以及如何通过数组这个数据结构来使用哈希表的知识,并解决问题。

题目描述

给定一个只包含小写字母的字符串,统计字符串中每个字母出现的频率,并找出出现频率最高的字母,如果最高频率的字母有多个,输出字典序靠前的那个字母。

输入描述

包含多组测试数据,每组测试数据占一行。

输出描述

有多组输出,每组输出占一行。

输入示例

2 abcdeef aabbccddeeff

输出示例

e a

例题中,给出一个字符串,要求统计出现频率最高的字符。

思路:如果把每个字符的总数都记录下来,再进行比较,那么总数最大的就是我们所求的,如果存在多个出现次数相同的字符,那就输出英文字母表中靠前的就可以,那么怎么记录每个字符出现的次数,并且能把字符和出现的次数对应上呢,这就用到哈希表的知识点。

方法:新建一个数组res,数组长度26,数组索引为0,1,2,···,25,我们让0代表a,1代表b,以此类推,25代表z,res[0]的值就代表a出现的次数,res[1]的值就代表b出现的次数,如果a的次数和b的次数相同,那就输出a,到此问题就解决。

上面我们提到,哈希数组就是把一个数组的值作为自己的索引,这里是字符串,把字符串转换成数组就可以,道理都是一样的,例如:str = [a,b,c,d,e],对于res来说,res的索引为0,1,2,···,这里0对应a,1对应b,这里有一种对应关系,这不就是把str的值当成res的索引。

如果还不能理解,把题意换一下,求一个整数数组中,数字出现次数最多的数字,数组元素仅包含0~9,即ans=[0,3,4,2,1],同理,res的索引为0,1,2等,这里的0,1,2就是ans的值,只不过相比上面的str,ans是直接将数组值作为res的索引,str是间接的将数组值作为res的索引。

以下是完整Java代码:

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); for (int i = 0; i < n; i++) { String input = scanner.next(); char mostFrequentChar = findMostFrequentChar(input); // 调用方法获取字符 System.out.println(mostFrequentChar); } scanner.close(); } // 找到最大频次字符的方法 public static char findMostFrequentChar(String input) { int[] frequency = new int[26]; for (char c : input.toCharArray()) { frequency[c - 'a']++; } char mostFrequentChar = 'a'; int maxFrequency = frequency[0]; for (int i = 1; i < 26; i++) { if (frequency[i] > maxFrequency) { maxFrequency = frequency[i]; mostFrequentChar = (char) ('a' + i); } } return mostFrequentChar; } }

如果给出的例题不好理解,请参考如下例题;力扣:面试题 01.01.判定字符是否唯一。

题目要求

实现一个算法,确定一个字符串s的所有字符是否全都不同。

示例 1:

输入:s= "leetcode"输出:false

示例 2:

输入:s= "abc"输出:true

限制:

  • 0 <= len(s) <= 100
  • s[i]仅包含小写字母

解题思路和方法是一样的,不再阐述,以下是C语言完整代码:

bool isUnique(char* astr){ int *result = (int *)calloc(26,sizeof(int)); int len = strlen(astr); int i; for(i=0;i<len;i++){ result[astr[i] - 97] = result[astr[i] - 97] + 1; } for(i=0;i<26;i++){ if(result[i] > 1){ return false; } } return true; }

附:以上内容中,第一道例题和例题代码均来自卡码网,若有侵权,将第一时间内删除。其余内容为自己撰写,若有错误,将在第一时间进行修改。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 15:56:00

数据库客户案例:每个物种都需要一个数据库!

1、GourdBase——多组学瓠瓜数据库 项目名称&#xff1a;GourdBase:一个以基因组为中心的多组学瓠瓜数据库 链接地址&#xff1a;http://www.gourdbase.cn/ 项目描述&#xff1a;GourdBase以基因组数据为中心&#xff0c;整合了相关的表型、标记、QTL、遗传图谱、品种等数据信…

作者头像 李华
网站建设 2026/7/22 15:53:44

工业控制与嵌入式系统中的NT5CC256M8IN-DI:2Gb DDR3L-1600内存扩展方案

NT5CC256M8IN-DI&#xff1a;南亚科技2Gb DDR3L SDRAM存储器深度解析在工业控制、嵌入式系统、通信设备以及各类对功耗和成本有综合要求的应用中&#xff0c;系统主控芯片往往需要外扩高速、可靠的随机存取存储器来满足数据缓存和处理需求。DDR3L SDRAM作为DDR3的低电压版本&am…

作者头像 李华
网站建设 2026/7/22 15:53:42

NT5TU64M8DE-AC数据手册解读:64M×8位、TSOP-66封装与DDR2核心参数

NT5TU64M8DE-AC&#xff1a;南亚科技512Mb DDR2 SDRAM存储器深度解析在工业控制、网络设备、通信基础设施以及各类成熟嵌入式系统设计中&#xff0c;内存颗粒的选型不仅关乎性能&#xff0c;更与产品的生命周期、稳定性以及向后兼容性密切相关。DDR2 SDRAM作为上一代主流内存标…

作者头像 李华
网站建设 2026/7/22 15:53:31

Codex与Claude Code代码生成工具对比与协同使用指南

1. 项目概述&#xff1a;Codex与Claude Code的差异化定位在代码生成与辅助开发领域&#xff0c;Codex和Claude Code作为两大主流工具&#xff0c;各自拥有独特的优势场景。经过半年时间的深度对比测试&#xff08;涉及136个实际开发任务&#xff09;&#xff0c;我发现两者并非…

作者头像 李华
网站建设 2026/7/22 15:52:45

DOM编程核心原理与性能优化实战指南

1. DOM编程基础概念解析作为前端开发的核心技能之一&#xff0c;DOM操作是每个工程师必须掌握的看家本领。DOM&#xff08;Document Object Model&#xff09;本质上是浏览器将HTML文档解析成的树状结构&#xff0c;它让JavaScript能够动态访问和更新页面内容。在实际项目中&am…

作者头像 李华
网站建设 2026/7/22 15:49:24

字符串操作语句,数据的微调

* 字符串操作语句 CONCATENATE-------- FIND------------REPLACE---------------SHIFT SPLIT----------------CONDENSE--------TRANSLATE-----------WRITE TO REPLACE ALL OCCURRENCES OF--------------&& concatenate[字符串拼接] DATA str type string. concaten…

作者头像 李华