统计字符串中出现最多的字母及其次数
鉴于javaeye的强大资源,本人在泡论坛之余,学习到两种方法,特拿上来予以分享。
由于有参考javaeye资料,具体链接已忘记了 - -! 如有侵权,请告知。
现有两种方式求解:
方法一: 利用数据结构map来求解。
public static void main(String[] args) {
Map<String, Long> charTimes = new HashMap<String, Long>();
String str = "aaaaabb";
//遍历字符数组
for (char each : str.toCharArray()) {
if ((each >= 65 && each <= 90) || (each >= 97 && each <= 122)) {//是否为数字
String charStr = String.valueOf(each);
if (charTimes.containsKey(charStr)) {
Long num = charTimes.get(charStr).longValue() + 1;
charTimes.put(charStr, num);
} else {
charTimes.put(charStr, 1L);
}
}
}
String maxAppearChar = null;
Long maxAppearTimes = 0L;
//遍历map
for (Map.Entry<String, Long> charAppear : charTimes.entrySet()) {
if (charAppear.getValue() > maxAppearTimes) {
maxAppearChar = charAppear.getKey();
maxAppearTimes = charAppear.getValue();
}
}
System.out.println("出现最多的字母:" + maxAppearChar);
System.out.println("出现次数:" + maxAppearTimes);
}
方法2: 采用数组来求解, 其时间复杂度相对于map来说要高一点。
/**
* 统计字符串中出现最多的字母及其次数
* @author gogole_09
*
*/
public class CountChar {
private int[] charCount = new int[26]; // 保存字母出现的次数,初步只统计26个字母(都转换成小写字母),
/**
* 统计字母出现次数
*
* @param str
*/
private void countChar(String str) {
str = str.toLowerCase();
// 字母a-z的索引
for (char chari = 'a'; chari <= (char) ('a' + 25); chari++) {
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (chari == ch) {
charCount[chari - 'a']++;
}
}
}
}
/**
* 计算出现最多的字母
* @return
*/
private char getMaxChar() {
char max = '?';
int maxcount = 0;
for (char chari = 'a'; chari <= (char) ('a' + 25); chari++) {
if (charCount[chari - 'a'] >= maxcount) {
maxcount = charCount[chari - 'a'];
max = chari;
}
}
return max;
}
/**
* 获取出现最多的字母出现的具体次数
* @return
*/
private int getMaxCount(){
return getMaxChar()=='?'?charCount[getMaxChar()-'a']:-1;
}
public static void main(String[] args) {
String str="aaabab";
CountChar c=new CountChar();
c.countChar(str);
System.out.println(str+":中出现次数最多的字母是:");
System.out.println(c.getMaxChar());
System.out.println("出现次数是:");
System.out.println(c.getMaxCount());
}
}
当然,此问题还有未考虑周全之处, 如发现有相同的最大值,该如何处理 【aabb】时。望大家集思广义,来拍拍砖.
分享到:
相关推荐
数据结构与算法分析是计算机科学中的核心课程,它探讨如何有效地组织和操作数据,以及设计和分析解决问题的算法。在Java语言描述的背景下,这些源码文件提供了丰富的实践示例,帮助我们深入理解各种数据结构和算法的...
5. **显示结果**:输出前五个出现次数最多的字母。可以使用`std::vector`的`topK`操作,或者直接遍历排序后的哈希表获取前五个元素。 6. **内存管理和资源释放**:关闭文件,清理使用的内存。 这个过程可能需要对...
### 浙江师范大学《数据结构与算法分析》2006期末试卷知识点解析 #### 一、单项选择题解析 1. **数据结构的二元组定义** - **题目内容**:DS={D,S}中,D是数据元素的有限集合,而S是D上_______的有限集合。 - **...
数据结构课程设计报告的主题是构建一个文章编辑系统,该系统具备输入文字、统计字符、查找字符串频率以及删除子串的功能。以下是对系统各个模块的详细解释: 1. **系统需求分析**: - 系统需能接收一页文字,限制...
在Python编程语言中,处理字符串是一项常见的任务,其中包括找出字符串中出现次数最多的字符。本文将通过两个示例来讲解如何实现这一功能。 首先,我们来看第一个示例: ```python ee = 'aa111(((bbhhhhhh%jjjjjj%...
### 二叉树的非递归先序、中序、后序遍历(数据结构与算法分析) 在计算机科学领域,二叉树是一种常见的数据结构,具有广泛的应用场景。本篇文章将详细介绍如何通过非递归的方式实现二叉树的先序、中序以及后序遍历...
统计字符串出现次数的算法设计如下: 1. 从文本的起始位置开始,逐字符与目标字符串的首字符比较。 2. 如果找到匹配的首字符,使用滑动窗口法检查接下来的字符是否与目标字符串的其余部分匹配。每次匹配,计数器`k`...
为了应对这些问题,人们开发了各种算法和数据结构,如Bloomfilter、Hash、bit-map、堆、数据库、倒排索引以及trie树等,这些可以被用来优化处理时间和空间的使用。 在单机处理方面,系统需要考虑的主要是CPU、内存...
### 武汉大学11年数据结构真题及答案知识...这些题目覆盖了数据结构的基础概念、逻辑结构、存储结构、算法时间复杂度、链表、栈、队列、图、二叉树等多个方面,通过这些练习可以帮助学生更好地掌握数据结构的相关知识。
根据给定的信息,本文将详细解释“数据结构关于文学研究助手代码”中涉及的重要知识点,主要包括模式匹配算法和KMP算法的实现。 ### 一、数据结构基础 #### 1.1 链表(Linked List) 链表是一种常用的数据结构,...
### 数据结构基础概念 #### 1. 数据结构基础概念解析 - **数据**: 在计算机科学中,数据是指能够被计算机处理的各种符号的集合,包括数字、字符、图像、声音等多种形式。 - **数据元素**: 即数据的基本单位,通常...
### 数据结构概述 数据结构是计算机科学中一个重要的概念,主要研究如何组织和存储数据,以便于高效地访问和修改。...这些数据结构和算法构成了计算机科学的基础,对于软件开发、算法优化等方面具有重要意义。
通过本课程设计模板的学习,学生不仅能够掌握数据结构的基本理论知识,还能通过实践项目加深对数据结构的理解与应用能力,尤其是如何在实际问题中灵活运用数据结构来解决问题。此外,通过实际操作,还能够提高学生的...
在本实验中,我们将探讨如何使用C++编程语言从名为`words.txt`的文本文件中读取单词,并找出其中重复字母对最多的单词。这个任务涉及到了C++中的文件输入输出流,以及字符串处理技巧。首先,我们需要理解C++中如何...
在计算机科学发展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采用C语言为描述工具的教材版本、至今又出现了采用C++语言为描述工具的多种教材版本。本教实验指导书是为已经学习过C++语言的...
#### 一、数据结构的定义与分类 数据结构是计算机科学中的一个重要概念,它指的是数据元素的集合以及它们之间的相互关系。数据结构可以分为两大类:逻辑结构和存储结构。 - **逻辑结构**:指的是数据元素之间的逻辑...
实验的核心是统计英文txt文件中每个单词出现的频率,最终展示出现次数最多的前10个单词及其数量。文件可能包含大小写字母、数字和下划线,其余字符视为分隔符。 **数据结构的选择** 在这个问题中,适合的数据结构...
这些内容可能只是吉林大学PPT的一部分,实际的PPT可能会深入讲解每种数据结构的实现、操作、性能分析以及相关算法的应用实例。对于学习数据结构的学生来说,理解并掌握这些知识是非常重要的,因为它们是理解和设计...