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的不重复性,快速找到所有出现的字符串
TreeSetset=newTreeSet();
for(inti=0;imaxList=newArrayList();*/
//用来保存出现最多的字符串和次数
HashMaphm=newHashMap();
//将出现过的字符遍历
Iteratorits=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.Entryenties: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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。