`
gogole_09
  • 浏览: 201989 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据结构与算法分析 -- 关于求出现最多次数的字母与次数

阅读更多

 统计字符串中出现最多的字母及其次数

 

 鉴于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】时。望大家集思广义,来拍拍砖.

 

分享到:
评论

相关推荐

    数据结构(C++)有关练习题

    在计算机科学发展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采用C语言为描述工具的教材版本、至今又出现了采用C++语言为描述工具的多种教材版本。本教实验指导书是为已经学习过C++语言的...

    数据结构与算法Python版——第四周作业

    1有序队列(10分) ...分析:题目规定 “每次移动中,选择最左侧的字母,将其从原位置移除,并加到字符串的末尾”,这样的操作可以让人联想到 队列的属性:FIFO。 解题思路: 1.先定义队列的类(注意

    计算机二级公共基础知识

    根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。 (1)如果一个非空的数据结构满足下列两个条件: ① 有且只有一个根结点; ② 每一个结点最多有一个前件,...

    上海电机学院C语言实训答案

     程序的总体设计和算法分析。  程序流程图、函数说明  源程序代码清单  测试数据和测试过程记录  遇到的问题及解决方法分析  实训小结 4. 程序运行方式 构建一个简易菜单,形如: 用户通过输入数值...

    matlab说话代码-Data-Science-Learning-Track:数据科学学习轨迹

    SQL(结构化查询语言)是一种编程语言,用于与关系数据库管理系统中存储的数据进行通信。 SQL语法类似于英语,因此相对容易编写,阅读和解释。 许多RDBMS使用SQL(和SQL的变体)来访问表中的数据。 例如,SQLite是一...

    会计理论考试题

    7.用紧急启动盘(ESD)启动计算机后,屏幕上出现的信息是___B____。 A、Windows98桌面 B、A> C、Windows98资源管理器 D、C> 8.关于文件的含义,比较正确的说法应该是 ___A____ 。 A、记录在存储介质上的一组相关信息...

    《Excel应用大全》示例文件 光盘文件

    • 统计足彩数据中最多连胜场数 • 单利与复利的比较 • 终值系数和现值系数 • 普通年金终值和现值的计算过程 • 预付年金终值和现值的计算过程 • 递延年金终值和现值的计算过程 • 年金终值系数表和年金现值系数...

    net学习笔记及其他代码应用

    25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的. [Page] 26.根据委托(delegate)的知识,请完成以下用户...

    Oracle9i的init.ora参数中文说明

    说明: 与 NLS_TIME_FORMAT 相似, 只不过它设置的是 TIMESTAMP 数据类型的默认值, 该数据类型既存储YEAR, MONTH 和 DAY 这几个日期值, 也存储 HOUR, MINUTE 和 SECOND 这几个时间值。 语法: TIMESTAMP '1997-01-31 ...

Global site tag (gtag.js) - Google Analytics