求包含a~z中多个字符的字符串中重复出现最多的字母及次数问题

2024-05-31 15:48

本文主要是介绍求包含a~z中多个字符的字符串中重复出现最多的字母及次数问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题: 一个字符串中可能包含a~z中的多个字符(有重复),如String data = "dkiekdadlidaakakkdkdkd",
 求出现次数最多的那个字母及次数,如有多个最多重复的字母,则都求出。


思路:

1、将字符串变为字符数组; 

2、将字符数组中字符放入set集合中去重,剩下的就是在字符串中出现的字母;

3、将字符放入list集合中,排序,然后在转为字符串;

4、遍历set集合,根据set集合中的字母,使用String类的indexOf()和lastIndexOf()方法,
      得到各个字母在排序后的字符串中出现的第一个位置和最后一个位置,差值得到出现的次数, 

        a)记录最大的出现次数,
b)将所有字母和对应的出现次数放入map集合中;

5、遍历map集合,根据记录的最大出现次数,得到最大出现次数对应的字母,放入maxlist集合中;
6、遍历maxlist集合,得到最大出现次数的所有字母。


下面直接贴上代码:


	public static void main(String[] args) {String str = "aakaakddccadldaklaaidkkeikdkdkds";getRepeatCharAndNum(str);}/*** 一个字符串中可能包含a~z中的多个字符(有重复),如String data = "dkiekdadlidaakakkdkdkd",* 求出现次数最多的那个字母及次数,如有多个最多重复的字母,则都求出。*/public static void getRepeatCharAndNum(String str) {/*** 思路: 1、将字符串变为字符数组; 2、将字母放入set集合中去重,剩下的就是在字符串中出现的字母;* 3、将字母放入list集合中,排序,然后在转为字符串;* 4、遍历set集合,根据set集合中的字母,使用String类的indexOf()和lastIndexOf()方法,* 得到各个字母在排序后的字符串中出现的第一个位置和最后一个位置,差值得到出现的次数, a)记录最大的出现次数,* b)将所有字母和对应的出现次数放入map集合中;* 5、遍历map集合,根据记录的最大出现次数,得到最大出现次数对应的字母,放入maxlist集合中;* 6、遍历maxlist集合,得到最大出现次数的所有字母*/// 将字符串转换为char数组char[] chars = str.toCharArray();// 得到去除重复字母的set集合TreeSet<String> set = getTreeSetByChars(chars);// 获得排序后的集合List<String> sortList = getSortList(chars);// 将排序后的集合转为字符串str = getSortString(sortList);int max = 0;// 出现最多的字母的次数Map<String, Integer> map = new HashMap<String, Integer>();// 遍历set集合,查看各个字母分别出现的次数,将数据存入map集合中,key为字母,value为次数Iterator<String> its = set.iterator();while (its.hasNext()) {String os = (String) its.next();int begin = str.indexOf(os);// 获得重复字母中第一个的位置int end = str.lastIndexOf(os);// 获得重复字母中最后一个的位置int value = end - begin + 1;// 差值就是重复字母的个数map.put(os, value);// 将重复字母和出现次数,放入map中if (value > max) {max = value;// 将目前出现的最大次数赋值给max变量}}//存放出现最多次的字母的集合ArrayList<String> maxList = getMaxAppearChar(map, max);//打印出现次数最多的字母及个数printMaxAppearChar(max ,maxList) ;}/***  遍历将重复出现次数最多的字母遍历出来*/private static void printMaxAppearChar(int max, ArrayList<String> maxList) {System.out.println("最大的数据重复是 :" + max);System.out.println(" 最大的数据是:");for (int i = 0; i < maxList.size(); i++) {System.out.print(maxList.get(i) + "  ");}}/***  存放出现最多次的字母的集合*/private static ArrayList<String> getMaxAppearChar(Map<String, Integer> map,int max) {ArrayList<String> maxList = new ArrayList<String>();for (String key : map.keySet()) {System.out.println("key = " + key + " value = " + map.get(key));if (max == map.get(key)) {maxList.add(key);// 最大出现次数的字母}}return maxList;}/*** 将排序后的list集合数据放入字符串中**/private static String getSortString(List<String> sortList) {StringBuffer buffer = new StringBuffer();for (int i = 0; i < sortList.size(); i++) {buffer.append(sortList.get(i));}String str = buffer.toString();System.out.println(str);return str;}/*** 获得排序后的集合* * @param chars* @return*/private static List<String> getSortList(char[] chars) {// list集合ArrayList<String> lists = new ArrayList<String>();for (int i = 0; i < chars.length; i++) {lists.add(String.valueOf(chars[i]));}// 将lists集合排序Collections.sort(lists);System.out.println(lists);return lists;}/*** 根据chars字符数组获得TreeSet集合,将重复字母去重*/private static TreeSet<String> getTreeSetByChars(char[] chars) {TreeSet<String> set = new TreeSet<String>();// set集合,去重for (int i = 0; i < chars.length; i++) {set.add(String.valueOf(chars[i]));}System.out.println(set);// 去重后的set集合中是重复出现的字符return set;}










这篇关于求包含a~z中多个字符的字符串中重复出现最多的字母及次数问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1018360

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at