您的位置:首页 > 其它

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

2014-10-02 21:22 399 查看
问题描述如下:一个字符串中可能包含a-z中的多个字符,如字符串String str="abcdabffeabcccdd",求出现次数最多的字符及其出现次数,如有多个重复的则都列出。
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/*
* 找出字符串中出现次数最多字符及次数:使用Map存储
*/
public class FrequencyOfChar {
public static void main(String[] args) {
String str="aavzcadaaaaavvvvvvv";
Map<Character,Integer> mapOfFrequency=getFrequencyOfChar(str);
System.out.println(mapOfFrequency);
Map<Character,Integer> mapOfMaxFrequency=getMaxFrequencyOfChar(mapOfFrequency);
System.out.println(mapOfMaxFrequency);
}
/**
* 得到字符串中字符的出现次数
*/
public static Map<Character,Integer> getFrequencyOfChar(String str){
Map<Character,Integer> mapOfFrequency=new HashMap<Character,Integer>();
char[] charArrayOfStr=str.toCharArray();
for(char ch:charArrayOfStr){
if(mapOfFrequency.get(ch)==null){//该字符第一次出现
mapOfFrequency.put(ch,1);
}else{//该字符已出现过
mapOfFrequency.put(ch, mapOfFrequency.get(ch)+1);//出现次数加1
}
}
return mapOfFrequency;
}
/**
* 得到出现次数最多的字符及出现次数的Map
*/
public static Map<Character,Integer> getMaxFrequencyOfChar(Map<Character,Integer> mapOfFrequency){
Map<Character,Integer> maxFrequencyOfChar=new TreeMap<Character,Integer>();
//循环遍历map,保存出现次数最大的
int num=0;//保存最大的出现次数
for(Character ch:mapOfFrequency.keySet()){
System.out.println(maxFrequencyOfChar);
if(num==0){//访问第一个字符
num=mapOfFrequency.get(ch);
maxFrequencyOfChar.put(ch, num);//将第一条映射加入
}
else{
if(mapOfFrequency.get(ch)>num){//当前字符的出现次数大于之前最大出现次数
num=mapOfFrequency.get(ch);
maxFrequencyOfChar.clear();
maxFrequencyOfChar.put(ch,mapOfFrequency.get(ch));
}
else if(mapOfFrequency.get(ch).equals(num)){//当前字符的出现次数等于之前最大出现次数
System.out.println();
maxFrequencyOfChar.put(ch,mapOfFrequency.get(ch));
}
}
}
return maxFrequencyOfChar;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐