题目:给定字符串,求出现次数最多的那个字母及次数,如有多个 重复则都输出。
eg,String data ="aaavzadfsdfsdhshdWashfasdf";
思路:
1.引入TreeSet,通过集合快速找到所有出现的字符串;
2,引入ArrayList:为了快速排序,再通过StringBuffer生成排序后的字符串;
3,通过String api中的基本方法 indeOf() lastIndexOf()来计算TreeSet中每个字符串的最大值;
4,如果出现相同的则把相同的都记录在一个列表中,
5,记录第一个出现次数最多的字符(为了计算多个字符串相同的情况)
6,计算最大字符串列表中哪些才是真正出现次数最多的。
1 import java.util.*; 2 3 public class MaxStringNumber { 4 5 public static void main(String[] args) throws Exception{ 6 String input ="aaavzadfsdfsdhshdWashfasdf"; 7 new MaxStringNumber().doString(input); 8 9 } 10 11 public void doString(String input) { 12 // TODO Auto-generated method stub 13 char [] chars = input.toCharArray(); 14 ArrayList lists = new ArrayList(); 15 TreeSet set = new TreeSet(); 16 for(int i = 0;i<chars.length;i++){ 17 lists.add(String.valueOf(chars[i])); 18 set.add(String.valueOf(chars[i])); 19 } 20 21 System.out.println(set); 22 Collections.sort(lists); 23 System.out.println(lists); 24 25 StringBuffer sb = new StringBuffer(); 26 for(int i=0;i<lists.size();i++){ 27 sb.append(lists.get(i)); 28 } 29 30 input = sb.toString(); 31 System.out.println(input); 32 int max = 0; 33 String maxString = ""; 34 ArrayList maxlist =new ArrayList(); 35 36 Iterator its = set.iterator(); 37 while(its.hasNext()){ 38 String os = (String)its.next(); 39 int begin = input.indexOf(os); 40 int end = input.lastIndexOf(os); 41 int value = end -begin +1; 42 if(value >max){ 43 max =value; 44 maxString = os; 45 maxlist.add(os); 46 }else if(value == max){ 47 maxlist.add(os); 48 } 49 } 50 int index = 0; 51 for(int i= 0;i<maxlist.size();i++){ 52 if(maxlist.get(i).equals(maxString)){ 53 index =i; 54 break; 55 } 56 } 57 58 System.out.println("出现最多的字符分别为:"); 59 for(int i=index;i<maxlist.size();i++){ 60 System.out.println(maxlist.get(i)+" "); 61 } 62 System.out.println(); 63 64 System.out.println("出现最多的次数为: "+max); 65 66 67 } 68 }