《JAVA 程序员面试宝典(第四版)》之循环、条件、概率
2015-12-06 20:27
453 查看
分享内容:关于集合的使用
书页号码:77页
题目:一个字符串中包含a~z中的多个字符,如有重复,如String data = "aavzcadfdsfsdhshgwasdfasdfddaaa",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
分享这个例子的原因是这个里面包含一些集合(TreeSet、ArrayList、indexOf、lastIndexOf)例子的使用,感觉比较经典因此就分享出来了,当然这篇文章我还想分享一些关于递归方面例子,但是感觉我对递归的了解还是比较肤浅,等我抽个时间研究后,再出来分享一下。
本篇未完待续........
书页号码:77页
题目:一个字符串中包含a~z中的多个字符,如有重复,如String data = "aavzcadfdsfsdhshgwasdfasdfddaaa",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.TreeSet; public class test { public static void main(String[] args) { String input = "aavzcadfdsfsdhshgwasdfasdfddaaa"; new test().doString(input); } public void doString(String input){ char[] chars = input.toCharArray(); ArrayList<String> lists = new ArrayList<String>(); // 第一步:先将数组传入到TreeSet,通过这个集合自动过滤掉重复的字母,并且该集合会自动排序。 TreeSet<String> set = new TreeSet<String>(); for(int i=0;i<chars.length;i++){ lists.add(String.valueOf(chars[i])); set.add(String.valueOf(chars[i])); } System.out.println(set);//输出:[a, c, d, f, g, h, s, v, w, z] Collections.sort(lists);// 第二步:使用ArrayList 进行快速排序 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] StringBuffer sb = new StringBuffer(); for(int i=0;i<lists.size();i++){ sb.append(lists.get(i)); } input = sb.toString(); System.out.println(input);//输出:aaaaaaaacdddddddffffghhsssssvwz int max = 0; String maxString = ""; ArrayList<String> maxList = new ArrayList<String>(); Iterator its = set.iterator(); while(its.hasNext()){ String os = (String) its.next(); int begin = input.indexOf(os); int end = input.lastIndexOf(os);// 第三步:使用indexOf 和 lastIndexOf 来求出最大值。 int value = end - begin +1; if(value>max){ max = value; maxString = os; maxList.add(os); }else if(value==max){ maxList.add(os); } } System.out.println("maxString:"+maxString);//输出:maxString:a System.out.println("maxList:"+maxList);//输出:maxList:[a] int index = 0; for(int i=0;i<maxList.size();i++){ if(maxList.get(i).equals(maxString)){ index = i; break; } } System.out.print("max data:");//输出:max data:a for(int i=index;i<maxList.size();i++){ System.out.println(maxList.get(i)+" "); } System.out.println(); System.out.println("max:"+max);//输出:max:8 } }
分享这个例子的原因是这个里面包含一些集合(TreeSet、ArrayList、indexOf、lastIndexOf)例子的使用,感觉比较经典因此就分享出来了,当然这篇文章我还想分享一些关于递归方面例子,但是感觉我对递归的了解还是比较肤浅,等我抽个时间研究后,再出来分享一下。
本篇未完待续........
相关文章推荐
- 黑马程序员—javaSE—面向对象
- 黑马程序员——OC之对象和方法之间的关系
- 黑马程序员——OC基础---protocol(协议)
- 程序员面试金典算法题
- 黑马程序员——OC学习——block
- 黑马程序员—— OC加强---ARC+Category+Block
- oc面试题
- 黑马程序员——结构体
- 为什么要使用内部类??以及内部类大汇总!!面试必备!!
- 黑马程序员——OC学习——Protocol和代理设计模式
- 【思考一】Android程序员想做手机游戏开发
- 黑马程序员——OC基础之NSMutableDictionary
- 黑马程序员——OC基础之NSDictionary
- 黑马程序员——OC基础之NSArray
- 黑马程序员——OC基础之NSMutableString
- 黑马程序员——OC基础之字符串截取及替换
- 黑马程序员——OC基础之Block
- 黑马程序员——OC基础之autorelease
- 前端面试题准备 2
- 黑马程序员——OC基础之NSString类