Java求字符串中出现次数最多的字符串以及出现次数

作者:欧阳鹏 时间:2023-06-03 03:45:34 

金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。

此题的解题思路如下:

引入TreeSet:通过集合快速找到所有出现过的字符串
引入ArrayList:为了快速排序,再通过StringBuffer生成排序后的字符串
通过String的indexOf方法和lastIndexOf方法来计算每个字符串出现的次数最大值
使用HashMap存储出现多的字符串和次数

代码如下:


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeSet;

public class SortTest {
 public static void main(String[] args) {
   String input = "httpblogcsdnnetouyangpeng";
   new SortTest().doString(input);
 }

public void doString(String input) {
   /**
    * 第一步:
    *   使用TreeSet快速找到所有出现的字符串
    *   将输入的字符串按升序排列
    */
   //将String转换为字符数组
   char[] chars=input.toCharArray();
   ArrayList<String> lists=new ArrayList<String>();
   //TreeSet是一个有序集合,TreeSet中的元素将按照升序排列
   //通过TreeSet的不重复性,快速找到所有出现的字符串
   TreeSet<String> set=new TreeSet<String>();
   for (int i = 0; i < chars.length; i++) {
     lists.add(String.valueOf(chars[i]));
     set.add(String.valueOf(chars[i]));
   }
   //set= [a, b, c, d, e, g, h, l, n, o, p, s, t, u, y]
   System.out.println("set= "+set);  
   //排序
   Collections.sort(lists);
   //lists= [a, b, c, d, e, e, g, g, g, h, l, n, n, n, n, o, o, p, p, s, t, t, t, u, y]
   System.out.println("lists= "+lists);  
   //将排序好的字符数组转换为StringBuffer
   StringBuffer sb=new StringBuffer();
   for (int i = 0; i < lists.size(); i++) {
     sb.append(lists.get(i));
   }
   input=sb.toString();  
   //input= abcdeeggghlnnnnooppstttuy
   System.out.println("input= "+input);  

/**
    * 第二步: 找出出现相同的字符并记录出现多少次
    */
   //最多重复出现多少次
   int max=0;
   //重复出现的字符
   String maxString="";
   /*//重复出现的字符列表
   ArrayList<String> maxList=new ArrayList<String>();*/
   //用来保存出现最多的字符串和次数
   HashMap<String, Integer> hm=new HashMap<String, Integer>();
   //将出现过的字符遍历
   Iterator<String> its=set.iterator();
   while (its.hasNext()) {
     String os=its.next();
     //字符出现在排序后input中的第一次位置
     int begin=input.indexOf(os);
     //字符出现在排序后input中的最后一次位置
     int end=input.lastIndexOf(os);
     //字符出现的次数
     int value=end-begin+1;
     if (value>=max) {
       max=value;
       maxString=os;
       hm.put(maxString, max);
     }
   }

for (Map.Entry<String, Integer> enties: hm.entrySet()) {
     if (enties.getValue()==max) {
       System.out.print("重复最多的字母是:"+enties.getKey());
       System.out.println("重复最多的次数是:"+enties.getValue());
     }
   }
 }
}

运行结果如下:


set= [a, b, c, d, e, g, h, l, n, o, p, s, t, u, y]
lists= [a, b, c, d, e, e, g, g, g, h, l, n, n, n, n, o, o, p, p, s, t, t, t, u, y]
input= abcdeeggghlnnnnooppstttuy

重复最多的字母是:n重复最多的次数是:4 

当有字符串重复的次数相同时,也可以将它们都打印出来。



public static void main(String[] args) {
 String input = "abbcccddddeeeeeffffffaaaaabbb";
 new SortTest().doString(input);
}

运行结果如下:


set= [a, b, c, d, e, f]
lists= [a, a, a, a, a, a, b, b, b, b, b, c, c, c, d, d, d, d, e, e, e, e, e, f, f, f, f, f, f]
input= aaaaaabbbbbcccddddeeeeeffffff
重复最多的字母是:f重复最多的次数是:6
重复最多的字母是:a重复最多的次数是:6

来源:http://blog.csdn.net/ouyang_peng/article/details/46526519

标签:Java,字符串
0
投稿

猜你喜欢

  • 学习Android自定义Spinner适配器

    2022-12-15 01:28:31
  • Mybatis中TypeAliasRegistry的作用及使用方法

    2023-06-27 19:21:32
  • C#中WPF内存回收与释放LierdaCracker的实现

    2022-11-13 00:15:44
  • C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法

    2021-06-06 04:59:48
  • Spring Boot实现分布式系统中的服务发现和注册(最新推荐)

    2022-07-10 03:50:23
  • 前端如何调用后端接口进行数据交互详解(axios和SpringBoot)

    2023-10-17 02:48:43
  • Java中四种访问权限资料整理

    2021-12-04 13:23:58
  • Spring boot事件监听实现过程解析

    2022-08-29 13:46:02
  • C#中38个常用运算符的优先级的划分和理解

    2022-09-23 17:12:44
  • Java 判断字符为中文实例代码(超管用)

    2021-08-24 13:18:31
  • Mybatis-Plus自动填充更新操作相关字段的实现

    2023-06-04 22:37:12
  • 使用注解@Validated效验VO参数是否合规

    2023-10-27 20:13:01
  • Springboot如何使用filter对request body参数进行校验

    2023-09-14 05:28:46
  • springboot如何读取配置文件到静态工具类

    2023-11-28 04:44:54
  • javax.persistence中@Column定义字段类型方式

    2021-12-03 21:21:44
  • java中List分页的几种方法介绍

    2022-03-01 12:04:28
  • Java MyBatis可视化代码生成工具使用教程

    2022-12-05 15:23:39
  • java 线程中start方法与run方法的区别详细介绍

    2023-08-23 20:41:31
  • 关于Spring事务隔离、传播属性与@Transactional注解

    2021-11-15 04:37:11
  • error LNK2019: 无法解析的外部符号 问题的解决办法

    2022-07-27 23:02:40
  • asp之家 软件编程 m.aspxhome.com