Java求字符串中出现次数最多的字符串以及出现次数
发布时间:2020-12-14 19:54:09 所属栏目:Java 来源:网络整理
导读:金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。 此题的解题思路如下: 引入TreeSet:通过集合快速找到所有出现过的字符串 引入Arr
金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。 此题的解题思路如下: 引入TreeSet:通过集合快速找到所有出现过的字符串 代码如下: import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.TreeSet; public class SortTest { public static void main(String[] args) { String input = "httpblogcsdnnetouyangpeng"; new SortTest().doString(input); } public void doString(String input) { /** * 第一步: * 使用TreeSet快速找到所有出现的字符串 * 将输入的字符串按升序排列 */ //将String转换为字符数组 char[] chars=input.toCharArray(); ArrayList<String> lists=new ArrayList<String>(); //TreeSet是一个有序集合,TreeSet中的元素将按照升序排列 //通过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])); } //set= [a,b,c,d,e,g,h,l,n,o,p,s,t,u,y] System.out.println("set= "+set); //排序 Collections.sort(lists); //lists= [a,y] System.out.println("lists= "+lists); //将排序好的字符数组转换为StringBuffer StringBuffer sb=new StringBuffer(); for (int i = 0; i < lists.size(); i++) { sb.append(lists.get(i)); } input=sb.toString(); //input= abcdeeggghlnnnnooppstttuy System.out.println("input= "+input); /** * 第二步: 找出出现相同的字符并记录出现多少次 */ //最多重复出现多少次 int max=0; //重复出现的字符 String maxString=""; /*//重复出现的字符列表 ArrayList<String> maxList=new ArrayList<String>();*/ //用来保存出现最多的字符串和次数 HashMap<String,Integer> hm=new HashMap<String,Integer>(); //将出现过的字符遍历 Iterator<String> its=set.iterator(); while (its.hasNext()) { String os=its.next(); //字符出现在排序后input中的第一次位置 int begin=input.indexOf(os); //字符出现在排序后input中的最后一次位置 int end=input.lastIndexOf(os); //字符出现的次数 int value=end-begin+1; if (value>=max) { max=value; maxString=os; hm.put(maxString,max); } } for (Map.Entry<String,Integer> enties: hm.entrySet()) { if (enties.getValue()==max) { System.out.print("重复最多的字母是:"+enties.getKey()); System.out.println("重复最多的次数是:"+enties.getValue()); } } } } 运行结果如下: set= [a,y] lists= [a,y] input= abcdeeggghlnnnnooppstttuy 重复最多的字母是:n重复最多的次数是:4 当有字符串重复的次数相同时,也可以将它们都打印出来。 如 public static void main(String[] args) { String input = "abbcccddddeeeeeffffffaaaaabbb"; new SortTest().doString(input); } 运行结果如下: set= [a,f] lists= [a,a,f,f] input= aaaaaabbbbbcccddddeeeeeffffff 重复最多的字母是:f重复最多的次数是:6 重复最多的字母是:a重复最多的次数是:6 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |