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

 更新时间:2017年04月05日 11:42:04   作者:欧阳鹏  
这篇文章主要为大家详细介绍了Java统计字符串中出现次数最多的字符串以及出现次数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

金山公司面试题:一个字符串中可能包含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 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详细介绍Java中的各种锁

    详细介绍Java中的各种锁

    不少同学开始慢慢接触多线时候,对线程之间为了保障数据安全性,一致性有所了解,本文详细解介绍java中的21种锁 ,需要的朋友可以参考下
    2021-06-06
  • springmvc视图解析流程代码实例

    springmvc视图解析流程代码实例

    这篇文章主要介绍了springmvc视图解析流程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • java实现酒店管理系统

    java实现酒店管理系统

    这篇文章主要为大家详细介绍了java实现酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • Java实现简单的socket通信教程

    Java实现简单的socket通信教程

    这篇文章主要介绍了Java实现简单的socket通信教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • JDK1.8新特性之方法引用 ::和Optional详解

    JDK1.8新特性之方法引用 ::和Optional详解

    这篇文章主要介绍了JDK1.8新特性之方法引用 ::和Optional,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • java Jersey框架初体验

    java Jersey框架初体验

    本篇主要是Jersey体验,你将在不做任何编码的情况下,体验Jersey框架的神气魅力!本文还假定你在eclipse里安装了Maven插件
    2016-07-07
  • java生成jar包的方法

    java生成jar包的方法

    这篇文章主要介绍了java生成jar包的方法,对Java生成jar包的具体步骤及方法进行了较为详细的描述,是非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • Java之String、StringBuffer、StringBuilder的区别分析

    Java之String、StringBuffer、StringBuilder的区别分析

    今天搞安卓在看书的时候遇到了StringBuilder这个类型的东东,有点小迷,不知道它跟string、stringbuffer的关系式怎么样的,赶快查阅相关资料,了解了个大概,拿出来分享一下
    2012-11-11
  • 解决java Graphics drawImage 无法显示图片的问题

    解决java Graphics drawImage 无法显示图片的问题

    这篇文章主要介绍了解决java Graphics drawImage 无法显示图片的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 详解java IO流之缓冲流的使用

    详解java IO流之缓冲流的使用

    本文主要介绍了java的IO流中的缓冲流的使用,缓冲流分为字节和字符缓冲流。分享了有关它们的实例代码,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01

最新评论