我的Java开发学习之旅------>求字符串中出现次数最多的字符串以及出现的次数
来源:互联网 发布:java线程安全的例子 编辑:程序博客网 时间:2024/06/18 03:56
金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfas
此题的解题思路如下:
- 引入TreeSet:通过集合快速找到所有出现过的字符串
- 引入ArrayList:为了快速排序,再通过StringBuffer生成排序后的字符串
- 通过String的indexOf方法和lastIndexOf方法来计算每个字符串出现的次数最大值
- 使用HashMap存储出现多的字符串和次数
代码如下:
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, b, c, d, e, e, g, g, g, h, l, n, n, n, n, o, o, p, p, s, t, t, t, u, y]System.out.println("lists= "+lists); //将排序好的字符数组转换为StringBufferStringBuffer sb=new StringBuffer();for (int i = 0; i < lists.size(); i++) {sb.append(lists.get(i));}input=sb.toString(); //input= abcdeeggghlnnnnooppstttuySystem.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, b, c, d, e, g, h, l, n, o, p, s, t, u, y]lists= [a, b, c, d, e, e, g, g, g, h, l, n, n, n, n, o, o, p, p, s, t, t, t, u, y]input= abcdeeggghlnnnnooppstttuy重复最多的字母是:n重复最多的次数是:4
当有字符串重复的次数相同时,也可以将它们都打印出来。
如
public static void main(String[] args) {String input = "abbcccddddeeeeeffffffaaaaabbb";new SortTest().doString(input);}运行结果如下:
set= [a, b, c, d, e, f]lists= [a, a, a, a, a, a, b, b, b, b, b, c, c, c, d, d, d, d, e, e, e, e, e, f, f, f, f, f, f]input= aaaaaabbbbbcccddddeeeeeffffff重复最多的字母是:f重复最多的次数是:6重复最多的字母是:a重复最多的次数是:6
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
1 2
- 我的Java开发学习之旅------>求字符串中出现次数最多的字符串以及出现的次数
- 求字符串中出现次数最多的字母及次数
- Java求字符串中出现次数最多的字符
- 出现次数最多的字符串
- 求一个字符串中连续出现次数最多的字串
- 求一个字符串中连续出现次数最多的字串
- 求字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的…
- 求一个字符串中连续出现次数最多的…
- 求一个字符串中连续出现次数最多的字串
- 求字符串中连续出现次数最多的子串
- 求一个字符串中出现次数最多的子串
- 求字符串中出现次数最多的字符
- java一个算法题:输出一个字符串中出现次数最多的字符,以及次数
- java一个算法题:输出一个字符串中出现次数最多的字符,以及次数
- 字符串中出现次数最多的字符
- js中判断字符串中出现次数最多的字符以及出现的次数
- 求字符串中出现次数最多的字符及其出现次数
- sgu267:Optimist vs. Pessimist(排序)
- 枚举类型的使用
- PHP接收GET和POST请求
- printf(未提交)
- 【java基础】——集合类(上)
- 我的Java开发学习之旅------>求字符串中出现次数最多的字符串以及出现的次数
- Autolayout使用详细介绍
- 数组及排序
- sgu269:Rooks(dp)
- 字符集个人理解
- php网站密码md5加密串比较方式
- NSString 的内存问题
- 农夫过河问题 简单的搜索
- How to Add a User and Grant Root Privileges on CentOS 6.5