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

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

  书页号码: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)例子的使用,感觉比较经典因此就分享出来了,当然这篇文章我还想分享一些关于递归方面例子,但是感觉我对递归的了解还是比较肤浅,等我抽个时间研究后,再出来分享一下。

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

时间: 2024-11-02 19:35:22

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

《JAVA 程序员面试宝典(第四版)》读书笔记之前言

工作五年了一直在小的软件公司混,总感觉自己的专业知识没有太大的提升.当然了中间也换了一两家公司,面试的公司就很多家,总感觉正规的软件公司(无论大小)对于基础知识的考核都非常重视,而不管你说你之前服务过什么NB公司,做过什么样NB的项目,上来就先拿一份基础的题目来考核你看一下你的水平.一开始我是排斥的,总感觉考这些东西没有什么用,反正有的东西工作中不一定就用得到,只要自己能够做出东西来就可以了.问题来了怎么样子才算“做出东西”呢?这个问题总感觉很难从理论上来回答,就拿我这几年工作的事情来说吧,在这

《Java程序员面试宝典》学习笔记(基本语法部分)

这是我学习欧立奇<Java程序员面试宝典>第三版的笔记.这篇是基本语法部分. ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 在Java中,字符只以一种形式存在,那就是Unicode.在JVM内部一切都由Unicode表示,而输出到外部后(JVM和OS的交界处就是各种输入/输出流)转换为其他形式的编码. Java用了中间缓存变量的机制,所以,j=j++可换成如下写法: te

《JAVA 程序员面试宝典(第四版)》之JAVA程序设计基础概念(1)类型转换

  问题主题:类型转换   书页号码:37页 题目: 讨论点:答案不是D,应该是B 理由:看下面在编译器输入的结果 知识扩展:装箱与拆箱, == 与 equals 区别 之前也老是听说什么装箱.拆箱之类的(装你妹的箱,JAVA概念就是多),之前不太留意,后来查了一下资料.所谓的装箱与拆箱主要是因为JAVA里面每一种基础类型都有相对应的对象类型,你比如基础类型 int 对应的是Integer,long 对应 Long,double 对应 Double 等等,为什么每种基础类型都有相对应的对象类型呢

《Java程序员面试宝典》5.2.3——中间缓存变量机制

看到第三版中5.2的例题4,一开始只是简单地接受中间缓存变量的机制,例题如下: public class Test { public static void main(String[] args) { int j = 0; for (int i = 0; i < 100; i++) { j = j++; } System.out.println(j); } } 上述结果为0.解释如下: 1. temp=j; 2. j=j+1; 3. j=temp; 看到例题5里的题:int j = 0; j =

《Java程序员面试宝典》学习笔记(数据结构部分)

有一千万行重复的短信,以文本文件的形式保存,一行一条,有重复.如何找出重复次数最多的10条? 可以用哈希表的方法对1千万条分成若干组进行边扫描边建散列表.第一次扫描,取首字节,尾字节,中间随便两字节作为Hash Code,插入到hash table中.并记录其地址和信息长度和重复次数,1千万条信息,记录这几个信息还放得下.同Hash Code且等长就疑似相同,比较一下.相同记录只加1次进hash table,但将重复次数加1.一次扫描以后,已经记录各自的重复次数,进行第二次hash table的

《Java程序员面试宝典》读书笔记1

今天读书发现一个很有趣的问题 请问以下程序会输出什么? public   class   Test2   {  public   static   void   main(String[]   args)   {  int   j   =   0;  for   (int   i   =   0;   i   <   100;   i++)   {  j   =   j++;  }  System.out.println(j);  }  } 输出的结果是:0 刚看到的时候觉得很不可思议,我选的答

Kindle pdf电子书 Java程序员面试宝典

适合应届生面试用,因为缺乏项目经验. 夯实一下基础. 临时抱抱佛教也可以. PDF清晰文字版 http://www.rcdisk.com/index.php/group/topic/id-62

JAVA程序员面试宝典总结-谈谈我的理解吧

2014年9月7日 今天开启阅读了这本书,中断了原计划中算法中级层次的系统性训练,我觉得先看看面试题吧.先给这本书A掉再说. 阅读了一天,大概阅读了一半,有点失望,因为这本书讲解的面试都是基础中的基础,我看着都着急,作者很难深入系统层次的去谈论技术,都是一些表面的文章. 不过我给大家整理了一些比较细节的东西. 第五章开始吧: ----------------------------------------------------- classLoader知识. 整体调用用到的是父类委托.为什么这

《Java程序员面试宝典》学习笔记(设计模式部分)

UML图: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性:  实现 指的是一个class类实现interface接口(可以是多个)的功能:实现是类与接口之间最常见的关系:在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性:  依赖 可以简单的理解,就是一个类A使用到了另一个类B