对于求字符串中出现频率最高字符的算法实现

算法-22-字符串的排序算法(四种排序) 目录 1、字符串 1.1、属性 1.2、字母表 2、字符串排序方法 3、键索引计数法 3.1、第一步:频率统计 3.2、第二步:将频率转换为索引 3.3、第三步:数据分类排序 3.4、第四步:回写排序好的数组 4、低位优先的字符串排序 5、高位优先的字符串排序 1、字符串 String 是由一系列字符组成的。字符的类型是 char,可能有 2的16次方个值。数十年以来,... 阅读详情

好久没写文章了,今天写了“求字符串中出现频率最高字符”的一个算法实现,代码中有非常详细思路注释
本算法只是此问题一种解法,还有许多需要改进的地方,但这是个人目前想到的比较好的解决方案
如有更好的解决方案,多谢指正!
以下代码仅供参考
 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/*
 * 主要思路:先将字符串存入set集合,以保证没有重复字符
 * 然后取出set集合中的每一个字符,并用String的indexOf()方法进行索引
 * 若索引不为-1,则说明该字符存在,记录其在字符串中的索引位置
 * 并将记录字符出现次数的变量++,再从当前索引位置+1处开始进行索引,
 * 直到索引值为-1,则退出循环,至此每个字符出现的频率都已记录
 * 接下来采用map进行字符与字符所对应的频率进行存储
 * 再将map的values形成一个ArrayList集合
 * 将计算得到的最大频率与map中的值进行比较
 * 若相等,则其为最大频率的字符
 */
public class HighFrequencyWord {
	
	//找出字符串或文件中频率出现最高的字符
	public static void findFrequencyWord(String str) {
		Collection<Integer> al=new ArrayList<Integer>();
		Map<String,Integer> map=new HashMap<String,Integer>();
		String tempStr = str;
		String[] stringArray = str.split("");
		//用来存储字符串里每个出现过的字符,且不会出现重复的
		Set<String> set = new HashSet<String>();
		int stringLength = stringArray.length;
		for (int i = 0; i < stringLength; i++) {
			set.add(stringArray[i]);
		}
		//移掉set中的一个空字符
		set.remove("");
		
		System.out.println(set);
		int count = 0;
		boolean flag = true;
		
		for (String s : set) {
			
			while (flag) {
				//如果索引存在
				if (tempStr.indexOf(s) != -1) {
					//记录出现字符的当前位置
					int index = tempStr.indexOf(s);
					//让字符串从下一索引处开始
					tempStr = tempStr.substring(index+1);
					//如果索引存在,记录值加1
					count++;
					
				} else {
					//如果索引不存在,赋值false退出循环
					flag = false;
				}
				
			}
			//为了执行下一循环
			flag = true;
			//把值存入map,让字符与其频率对应
			map.put(s,count);
			//因为是上一结果,所以让值归零,并且字符串变回原来的字符串
			count = 0;
			tempStr = str;
			
		}
		//将map的值变为一个列表
		al= map.values();
		//然后转为数组
		Integer[] stringCount =al.toArray(new Integer[]{});
		int countLength=stringCount.length;
		//按升序排序
		Arrays.sort(stringCount);
		//得到数组最大值
		int max=stringCount[countLength-1];
		for(String s: set){
			for(int i=0;i<countLength;i++){
				//如果map的值与最大值相同,则输出
				if(map.get(s)==max){
					System.out.println(s + ":" + max);
				}
			}
			
		}
	}
	
	public static void main(String[] args) {
		findFrequencyWord("ababb");
	}
}


 

 

H面试程序(19): 统计出现频率的最高的K的字符串 出处:http://blog.youkuaiyun.com/v_JULY_v 我做了一些详细的注释   //copyright@yansha &&July //July、updated,2011.05.08 //题目描述: //搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的 //长度为1-255字节。假设目前有一千万个记录(这些查询串 阅读详情

相关推荐

Unity Hub报错The Hub as encountered a critical error and must close

如果注册表HKEY_LOCAL_MACHINE\SOFTWARE\Unity Technologies\这个目录下有Hub文件,直接删掉然后重装就可以。C:\Users\Administrator\AppData\Roaming\Unity 作者:SevenVee。HKEY_CURRENT_USER\Software\Unity 下所有项,尝试过,卸载重装,清除临时文件无果后,最终决定删除所有与Hub有关的文件。重装unity后可以打开了。结果:卸载重装后还是会出现此问题。结果:重装后还是无法解决。

qq_42345116的博客 3638

Java面试题:得到一个字符串中出现频率最高的字符

得到一个字符串中出现频率最高的字符 方法有很多,在这里我只写一种我认为比较好理解的方法。 // 得到字符串中出现频率最高的字符 public static void getChar(String str) { String[] strs = str.split(""); HashMap<String, Integer> map = ne...

DingJieZ的博客 1087

地平线旭日X3派(RDK X3)从开箱到联网:新手避坑指南

本文为地平线旭日X3派(RDK X3)新手提供从开箱到联网的完整避坑指南。详细讲解了硬件识别、系统镜像烧录、串口调试(波特率921600)、有线/无线网络配置以及SSH/VNC远程访问等关键步骤,帮助开发者快速搭建稳定的开发环境,为后续AI应用部署扫清障碍。

weixin_29174385的博客 935

计算一个字符串中出现频率最高的字符和次数

第一版 const str = "lao du 666 999"; function findMaxDuplicateChar(str) { // 定义最大频率 let maxValue = 1; // 定义出现的字符,有可能频率相等所以是数组 let maxChar = []; let obj = {}; for (let s = 0; s < str.length; s++) { if (str[s

前端阿玉博客 762

【MFiX后处理】MFiX中使用des_usr_var输出颗粒的传热量(2020-11-27更新变更输出变量名方法)

参考之前Yin的那一篇博客 https://www.cnblogs.com/Jay-CFD/p/10621274.html 输出一下颗粒传热量 使用的算例是fluid_bed_dem_2d 打开des scalar tracking 前面都和Yin那篇一样,打开enable user scalar tracking 输入2 因为第一个用来测试Y加速度了 第二个输出传热量 然后在output vtk中勾选好 更改源代码 源代码为des_thermo_newvalues.f 在mfix-GUI自带的ed

beidou111的博客 1532

Zotero on Mac: 高效文献管理与引用指南

本文为Mac用户提供了一份全面的Zotero高效文献管理与引用指南。从安装配置、文献收集管理、PDF深度阅读与笔记,到在Word中无缝插入引用和生成参考文献,详细讲解了核心工作流。同时推荐了ZotFile、Better BibTeX等必备插件,并介绍了利用同步与WebDAV实现跨设备无缝衔接的方法,助力研究者构建个人数字知识库,极大提升学术研究效率。

weixin_29281941的博客 1176

统计字符串某种字符出现的频率(更高效率)

为了统计字符串中每种字符出现的频率,使用HashMap这种数据结构。其中,字符作为Key,出现的频率作为Value。 基本算法为:   1. 将字符串分成字符数组   2. (1)如果HashMap中的Key没有正在读取的字符,则会插入一个新的Key,赋值为1。    (2)如果正在读取的字符已经存在于HashMap的Key中,则会将其Value的值+1。   3. 一直读取到字符数组的最后一位形成最终的HashMap。 关于HashMap中getOrDefault(K, V)方法:   如果HashMa

weixin_43959471的博客 826

uniapp [微信小程序] - 详解微信小程序端接入mqtt全流程及示例源码教程,uniApp微信小程序端如何接入MQTT插件并实现连接/断开+发布订阅+消息队列+离线重连等各种示例代码(开箱即用)

uniapp微信小程序接入MQTT,uniapp中使用mqtt,uniapp 微信小程序端接入mqtt示例代码教程,适用于微信小程序的MQTT插件,uniapp开发微信小程序连接mqtt,uniApp微信小程序接入MQTT协议,uniapp vue3微信小程序使用MQTT的小例子接入流程,使用uniapp开发小程序接入mqtt,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,如何在项目里集成mqtt,Mqtt协议,主动连接mqtt,订阅消息,实现发布,订阅和接收消息

🏆 前端领域优质创作者 2881

每日一道算法(计算给定字符串的每次字符出现的次数)

计算一个字符串中每个字符出现次数。 比如给定字符串asdfasdfsajfkadf 统计结果:{a=3,b=5,f=4…} package com.demo; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * @author lj * @Create 2022-02-15-13:37 * @description 计算这个字符串中每个字符出现的次数 * 计算一个字符串中每个字符出现次数。

weixin_44912627的博客 571

R 语言 ggplot2 绘制精美高级全球地图

在本教程中,我们将学习如何使用R语言和ggplot2包绘制精美高级地图。ggplot2是一个功能强大的数据可视化包,它可以让我们创建漂亮、交互式的地图。我们将使用R中的一些其他包来处理地理空间数据,以便与ggplot2无缝协作。

Mrrunsen的博客 1866

论文阅读 AIED 2024 Coding with AI: How Are Tools Like ChatGPT Being Used by Students in Foundational Pro

该论文题为《Coding with AI: How Are Tools Like ChatGPT Being Used by Students in Foundational Programming Courses》,由美国犹他州立大学的 Aashish Ghimire 与 John Edwards 共同撰写,发表于人工智能与教育领域顶级会议。

CSPhD-winston的博客 307

字符串之谜:如何找到出现频率最高的字符?

一言以蔽之,密码校验,表单验证,可视化数据统计等多种场景下,我们都会遇到这个问题。所以还是蛮重要的,我们看看实现原理到底是什么?具体逻辑又是什么? 这边我推荐一个方法——charAt() 接下来具体看看这个方法 在这个例子中,首先定义了一个字符串 str,然后通过 charAt() 方法获取了字符串中位于第 4 个位置上的字符,并将其赋值给变量 char1,最后打印输出结果为 "u"。 ***(0对应y,1对应g,2对应u,3对应g,4对应u,5对应d。。。。) == 下标*** 接着,尝试通过 ch

杜永康的博客 2300

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

js中常见的算法面试题

1.超过范围的两个大整数相加 主要思路:将数字转换为字符串,每个字符串按位相加 function bigNumberAdd(number1, number2) { let result = "", carry = false; number1 = number1.split(""); number2 = number2.split(""); while (number1.length || number2.length || carry) {

一个无聊的前端写点无聊的东西 1658

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【力扣刷题第一期】Python 数据结构与算法

字符串、队列、栈

许虹蕾的博客 1120

js累加求和

js求和和查找字符串出现次数

qq_40537245的博客 666

2.2最高频率,三艘船,回文数

明明的爸爸是一名数学专家,他当然对这种类型的数字早有研究,他对明明说:“这些是回文数,它是一种特殊的数字现象,即这些数字的左右两边是对称的。你作为明明的好朋友,有一次和明明在闲聊,问到他出差时船的航行距离有多少时,明明没有正面回答你这个问题,而只是把三艘船(特快、快、慢)的速度,以及它们到达目的地的时间是几点钟(并不知道分别是哪一天,只知道三艘船都在100天以内到达了终点)告诉了你,要你推算出两地间的距离长度。明明的问题可以归结为:给你一个整数,通过上面叙述的求回文数的方法,求出回文数,并输出求解过程。

2302_76910605的博客 512

hot100相关(六题一组记录)

class Solution { public int search(int[] nums, int target) { int len = nums.length; int left = 0; int right = len - 1; int res = 0; while (left <= right) { int mid = ...

m0_50996152的博客 155

任意给定一个字符串,能够找出里面出现频率最高的的字符,以及出现的具体次数。

1.问题描述: 任意给定一个字符串,能够找出里面出现频率最高的的字符,以及出现的具体次数。 2.解决办法: let s='hellooworld'; function f(s){ //获取到每个字符对应出现的次数 let obj={};//用来接收 let finalObj=[];//用来存储出现次数最多的字符信息 ...

Kratial的博客 3863

java找出字符串出现最多的字符串_Java 求字符串中出现频率最高字符

importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collection;importjava.util.HashMap;importjava.util.HashSet;importjava.util.Map;importjava.util.Set;/** 查找字符串中出现频率最高的字符** 主要思路:先将字符串存入se...

weixin_39523280的博客 622

求一个字符串中出现频率最高的字符

这段时间在准备Android面试,Android面试的笔试题中可能会涉及到许多Java知识,包括Java编程。 这里有一道遇见频率比较高的Java编程题: 题目:求一个字符串中出现频率最高的字符 先讲解一下下面这个方法的思路: - 首先遍历这个字符串,把这个字符串的所有字符保存到一个Set集合中,目的是去除重复的字符,得到这个字符串中有哪些字符。 - 然后遍历Set集合,计算每个字符在字符

殇神马的博客 7683

java实现字符串String逆序输出和统计出现频率最高的方法

java实现字符串String逆序输出和统计出现频率最高的方法 逆序输出: public static void main(String[] args) { // 字符串逆序输出 String sr = TestString.stringReverse("abcdefg"); System.out.println("逆序输出:" + sr); } public static Str...

qq_41407029的博客 745

JAVA求输出频率最高的字符_Java 字符串计算频率出现最高的字符

public class HighFrequencyWord {public static void findFrequencyWord(String str) {Collection al=new ArrayList();Map map=new HashMap();String tempStr = str;String[] stringArray = str.split("");System.o...

weixin_29306317的博客 485

#输出频率最高且最先出现的字符#

假设有一个字符串,字符串内部的所有字符都是在ascii编码的范围内,编码求出字符串中出现频率最高的字符,如果频率最高的字符有几个字符出现的频率一样,则输出最先出现的字符。 如输入串为 “hello world, every body!”,则输出频率最高且最先出现的字符。 方法定义:char getMaxOccurChar(String str) 输入:hello world, ever...

树高千尺 唯有根深 681

在一个数组或字符串中找到出现频率最高的那个元素的方法

思路: 1,将数组按大小排序。 2,相邻两个元素比较是否相等,并记录相等次数得到这个元素出现的频率 3,在比较过程中,不断将最大次数和其对应的元素赋值给一个变量,最后得到出现频率最高的元素 4,通过集合收集并再次比较的方法处理多个元素出现频率同时最高的情况 我们以双色球蓝球的玩法为例,实现的代码如下: int[] blueBalls = new int[n]; /*

yxb_yingu的博客 2901

Java 字符串计算频率出现最高的字符

public class HighFrequencyWord { public static void findFrequencyWord(String str) { Collection<Integer> al=new ArrayList<Integer>(); Map<String,Integer>...

aoe41606的博客 327
上一篇: Jive talkin':开放源码的 Java论坛软件
下一篇: 四款5000元左右亲民热销超级本推荐
coollor
博客等级 码龄15年 48粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值