Java求字符串中出现次数最多的字符串以及出现次数
金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如Stringdata="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
此题的解题思路如下:
引入TreeSet:通过集合快速找到所有出现过的字符串
引入ArrayList:为了快速排序,再通过StringBuffer生成排序后的字符串
通过String的indexOf方法和lastIndexOf方法来计算每个字符串出现的次数最大值
使用HashMap存储出现多的字符串和次数
代码如下:
importjava.util.ArrayList; importjava.util.Collections; importjava.util.HashMap; importjava.util.Iterator; importjava.util.Map; importjava.util.TreeSet; publicclassSortTest{ publicstaticvoidmain(String[]args){ Stringinput="httpblogcsdnnetouyangpeng"; newSortTest().doString(input); } publicvoiddoString(Stringinput){ /** *第一步: *使用TreeSet快速找到所有出现的字符串 *将输入的字符串按升序排列 */ //将String转换为字符数组 char[]chars=input.toCharArray(); ArrayListlists=newArrayList (); //TreeSet是一个有序集合,TreeSet中的元素将按照升序排列 //通过TreeSet的不重复性,快速找到所有出现的字符串 TreeSet set=newTreeSet (); for(inti=0;i maxList=newArrayList ();*/ //用来保存出现最多的字符串和次数 HashMap hm=newHashMap (); //将出现过的字符遍历 Iterator its=set.iterator(); while(its.hasNext()){ Stringos=its.next(); //字符出现在排序后input中的第一次位置 intbegin=input.indexOf(os); //字符出现在排序后input中的最后一次位置 intend=input.lastIndexOf(os); //字符出现的次数 intvalue=end-begin+1; if(value>=max){ max=value; maxString=os; hm.put(maxString,max); } } for(Map.Entry 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
当有字符串重复的次数相同时,也可以将它们都打印出来。
如
publicstaticvoidmain(String[]args){ Stringinput="abbcccddddeeeeeffffffaaaaabbb"; newSortTest().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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。