java

 


在一个字符串中可能包含a-z中的多个字符,如有重复,如String data = "shfksjgljsfsfs",求出现次数最多的那个字母及次数,如有多个重复的则求出。

思路:
1.引入TreeSet,通过集合快速找到所有出现的字符。
2.引入ArrayList,为了快速排序,再通过StringBuffer生成排序后的字符串。
3.通过String Api中基本方法, indexOf lastIndexOf来计算TreeSet中每个字符串出现的最大值。
4.如果出现相同的则把相同的都记录在一个列表中。
5.记录第一个出现次数最多的字符(为了计算多个字符串相同的情况)。
6.计算最大字符串列表中哪些才是真正出现次数最多的。

Java代码 复制代码
  1.   
  2. import java.util.ArrayList;   
  3. import java.util.Collections;   
  4. import java.util.Iterator;   
  5. import java.util.TreeSet;   
  6.   
  7.   
  8. public class Test2 {   
  9.     public static void main(String args[]){   
  10.         String input = "adsfsafasdfjlfdjgkdf";   
  11.         new Test2().doString(input);   
  12.     }   
  13.   
  14.     public void doString(String input){   
  15.         char[] chars = input.toCharArray();   
  16.         ArrayList lists = new ArrayList();   
  17.         TreeSet set = new TreeSet();   
  18.         for(int i=0;i<chars.length;i++){   
  19.             lists.add(String.valueOf(chars[i]));   
  20.             set.add(String.valueOf(chars[i]));   
  21.         }   
  22.         System.out.println(set); //set没有重复的元素   
  23.         Collections.sort(lists);   
  24.         System.out.println(lists); //sort排序   
  25.   
  26.         StringBuffer sb = new StringBuffer();   
  27.         for(int i=0;i<lists.size();i++){   
  28.             sb.append(lists.get(i));   
  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.             }   
  47.             else if(value == max){   
  48.                 maxlist.add(os);   
  49.             }   
  50.         }   
  51.   
  52.         int index = 0;   
  53.         for(int i=0;i<maxlist.size();i++){   
  54.             if(maxlist.get(i).equals(maxString)){   
  55.                 index = i;   
  56.                 break;   
  57.             }   
  58.         }   
  59.         System.out.println("出现最多的字符分别是:");   
  60.         for(int i=index;i<maxlist.size();i++){   
  61.             System.out.println(maxlist.get(i) + "  ");   
  62.         }   
  63.         System.out.println();   
  64.         System.out.println("出现最多的次数为" + max);   
  65.     }   
  66. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值