首页 > 开发 > Java > 正文

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

2024-07-13 10:06:06
字体:
来源:转载
供稿:网友

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

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


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表