字符串中出现次数最多的字符算法

 求一个字符串中出现次数最多的字符算法总结如下

/* *Class GetMaxChar.java *Create Date: 2009-11-25 *Author:a276202460 */ package com.rich.notation; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class GetMaxCountChar { public static void main(String[] s){ String str = "jlfjdlsuoeilkjalfdufielgjlafodiglldjfdjflweifjlgjsdlgjagjlasjgl"; System.out.println(printmaxcountcharMap(str)); System.out.println(printmaxcountcharASII(str)); System.out.println(printmaxcountcharArray(str)); long starttime = System.currentTimeMillis(); for(int i = 0 ;i < 20000;i++) printmaxcountcharASII(str); System.out.println(System.currentTimeMillis() - starttime); starttime = System.currentTimeMillis(); for(int i = 0 ;i < 20000;i++) printmaxcountcharArray(str); System.out.println(System.currentTimeMillis() - starttime); starttime = System.currentTimeMillis(); for(int i = 0 ;i < 20000;i++) printmaxcountcharMap(str); System.out.println(System.currentTimeMillis() - starttime); } /* * CSDN shine333 提供,堪称经典(至少我没想到根据char去找对应的count值,所以我个人认为经典,如果有好的算法还请贴出来大家共享之) */ public static String printmaxcountcharASII(String str){ int[] count = new int[128]; for (int i = str.length(); i-- > 0; count[str.charAt(i)]++); int maxIndex = 0; for (int i = 1; i < count.length; i++) { if (count[i] > count[maxIndex]) { maxIndex = i; } } return (char)maxIndex+":"+count[maxIndex]; } /* * CSDN a276202460 菜鸟提供 * 缺点排序浪费时间,和串长度成正比 */ public static String printmaxcountcharArray(String str){ char[] chars = str.toCharArray(); Arrays.sort(chars); int max = 0; int count = 0; int maxchar = 0; int oldchar = 0 ; for(int i = 0 ;i <= chars.length;i++){ if(i == 0 || i == chars.length || oldchar != chars[i] ){ max = max > count?max:count; maxchar = max > count?maxchar:oldchar; if(i == chars.length){ break; } oldchar = chars[i]; count = 0; } count++; } return (char)maxchar+":"+max; } /* * CSDN 另一网友提出用map 以下我补充完代码 * 缺点map判断和修改map结构浪费时间,另外还要迭代 */ public static String printmaxcountcharMap(String str){ Map<Character,Integer> charmap = new HashMap<Character,Integer>(); char curchar = 0; for(int i = 0 ;i < str.length();i++){ curchar = str.charAt(i); if(charmap.containsKey(curchar)){ charmap.put(curchar, charmap.get(curchar) + 1); }else{ charmap.put(curchar, 1); } } char maxchar = 0; int maxcount = 0; Iterator it = charmap.keySet().iterator(); while(it.hasNext()){ curchar = (Character)it.next(); if(charmap.get(curchar) > maxcount){ maxchar = curchar; maxcount = charmap.get(curchar); } } return maxchar+":"+charmap.get(maxchar); } }

 

运行结果:

l:13
l:13
l:13
62
94
281

 

你可能感兴趣的:(算法,String,Integer,iterator,Class,character)