码迷,mamicode.com
首页 > 编程语言 > 详细

《JAVA 程序员面试宝典(第四版)》之循环、条件、概率

时间:2015-12-06 20:55:16      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

 

     分享内容:关于集合的使用

     书页号码:77页

     题目:一个字符串中包含a~z中的多个字符,如有重复,如String data = "aavzcadfdsfsdhshgwasdfasdfddaaa",求出现次数最多的那个字母及次数,如有多个重复的则都求出。

       

 1 import java.util.ArrayList;
 2 import java.util.Collections;
 3 import java.util.Iterator;
 4 import java.util.TreeSet;
 5 
 6 
 7 
 8 
 9 public class test {
10     
11         public static  void main(String[] args) {
12             String input = "aavzcadfdsfsdhshgwasdfasdfddaaa";
13             new test().doString(input);
14     }
15         
16     public void doString(String input){
17         char[] chars = input.toCharArray();
18         ArrayList<String> lists = new ArrayList<String>();
19         
20         // 第一步:先将数组传入到TreeSet,通过这个集合自动过滤掉重复的字母,并且该集合会自动排序。
21         TreeSet<String> set = new TreeSet<String>();
22         for(int i=0;i<chars.length;i++){
23             lists.add(String.valueOf(chars[i]));
24             set.add(String.valueOf(chars[i]));
25         }
26         
27         System.out.println(set);//输出:[a, c, d, f, g, h, s, v, w, z]
28         Collections.sort(lists);// 第二步:使用ArrayList 进行快速排序
29         System.out.println(lists);//输出:[a, a, a, a, a, a, a, a, c, d, d, d, d, d, d, d, f, f, f, f, g, h, h, s, s, s, s, s, v, w, z]
30         
31         StringBuffer sb = new StringBuffer();
32         for(int i=0;i<lists.size();i++){
33             sb.append(lists.get(i));
34         }
35         
36         input = sb.toString();
37         System.out.println(input);//输出:aaaaaaaacdddddddffffghhsssssvwz
38         int max = 0;
39         String maxString = "";
40         ArrayList<String> maxList = new ArrayList<String>();
41         
42         Iterator its = set.iterator();
43         while(its.hasNext()){
44             String os = (String) its.next();
45             int begin = input.indexOf(os);
46             int end = input.lastIndexOf(os);// 第三步:使用indexOf 和 lastIndexOf 来求出最大值。
47             int value = end - begin +1;
48             if(value>max){
49                 max = value;
50                 maxString = os;
51                 maxList.add(os);
52             }else if(value==max){
53                 maxList.add(os);
54             }
55         }
56         
57         System.out.println("maxString:"+maxString);//输出:maxString:a
58         System.out.println("maxList:"+maxList);//输出:maxList:[a]
59         
60         int index = 0;
61         for(int i=0;i<maxList.size();i++){
62             if(maxList.get(i).equals(maxString)){
63                 index = i;
64                 break;
65             }
66         }
67         
68         System.out.print("max data:");//输出:max data:a 
69         for(int i=index;i<maxList.size();i++){
70             System.out.println(maxList.get(i)+" ");
71         }
72         
73         System.out.println();
74         System.out.println("max:"+max);//输出:max:8
75         
76         }    
77     
78     
79 }

        分享这个例子的原因是这个里面包含一些集合(TreeSet、ArrayList、indexOf、lastIndexOf)例子的使用,感觉比较经典因此就分享出来了,当然这篇文章我还想分享一些关于递归方面例子,但是感觉我对递归的了解还是比较肤浅,等我抽个时间研究后,再出来分享一下。

      本篇未完待续........

 

《JAVA 程序员面试宝典(第四版)》之循环、条件、概率

标签:

原文地址:http://www.cnblogs.com/pangjia/p/5024330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!