Java求字符串中出現(xiàn)次數(shù)最多的字符串以及出現(xiàn)次數(shù)
金山公司面試題:一個字符串中可能包含a~z中的多個字符,如有重復(fù),如String data="aavzcadfdsfsdhshgWasdfasdf",求出現(xiàn)次數(shù)最多的那個字母及次數(shù),如有多個重復(fù)的則都求出。
此題的解題思路如下:
引入TreeSet:通過集合快速找到所有出現(xiàn)過的字符串
引入ArrayList:為了快速排序,再通過StringBuffer生成排序后的字符串
通過String的indexOf方法和lastIndexOf方法來計算每個字符串出現(xiàn)的次數(shù)最大值
使用HashMap存儲出現(xiàn)多的字符串和次數(shù)
代碼如下:
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快速找到所有出現(xiàn)的字符串 * 將輸入的字符串按升序排列 */ //將String轉(zhuǎn)換為字符數(shù)組 char[] chars=input.toCharArray(); ArrayList<String> lists=new ArrayList<String>(); //TreeSet是一個有序集合,TreeSet中的元素將按照升序排列 //通過TreeSet的不重復(fù)性,快速找到所有出現(xiàn)的字符串 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); //將排序好的字符數(shù)組轉(zhuǎn)換為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); /** * 第二步: 找出出現(xiàn)相同的字符并記錄出現(xiàn)多少次 */ //最多重復(fù)出現(xiàn)多少次 int max=0; //重復(fù)出現(xiàn)的字符 String maxString=""; /*//重復(fù)出現(xiàn)的字符列表 ArrayList<String> maxList=new ArrayList<String>();*/ //用來保存出現(xiàn)最多的字符串和次數(shù) HashMap<String, Integer> hm=new HashMap<String, Integer>(); //將出現(xiàn)過的字符遍歷 Iterator<String> its=set.iterator(); while (its.hasNext()) { String os=its.next(); //字符出現(xiàn)在排序后input中的第一次位置 int begin=input.indexOf(os); //字符出現(xiàn)在排序后input中的最后一次位置 int end=input.lastIndexOf(os); //字符出現(xiàn)的次數(shù) 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("重復(fù)最多的字母是:"+enties.getKey()); System.out.println("重復(fù)最多的次數(shù)是:"+enties.getValue()); } } } }
運行結(jié)果如下:
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
重復(fù)最多的字母是:n重復(fù)最多的次數(shù)是:4
當(dāng)有字符串重復(fù)的次數(shù)相同時,也可以將它們都打印出來。
如
public static void main(String[] args) { String input = "abbcccddddeeeeeffffffaaaaabbb"; new SortTest().doString(input); }
運行結(jié)果如下:
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ù)最多的字母是:f重復(fù)最多的次數(shù)是:6 重復(fù)最多的字母是:a重復(fù)最多的次數(shù)是:6
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java案例使用集合方法實現(xiàn)統(tǒng)計任意字符串中字符出現(xiàn)的次數(shù)
- Java實現(xiàn)統(tǒng)計字符串出現(xiàn)的次數(shù)
- Java統(tǒng)計一個字符串在另外一個字符串出現(xiàn)次數(shù)的方法
- Java統(tǒng)計字符串中字符出現(xiàn)次數(shù)的方法示例
- Java獲取指定字符串出現(xiàn)次數(shù)的方法
- java統(tǒng)計字符串中重復(fù)字符出現(xiàn)次數(shù)的方法
- java統(tǒng)計字符串中指定元素出現(xiàn)次數(shù)方法
- java求數(shù)組元素重復(fù)次數(shù)和java字符串比較大小示例
- java字符串比較獲取字符串出現(xiàn)次數(shù)的示例
- JAVA統(tǒng)計字符串中某個字符出現(xiàn)次數(shù)的方法實現(xiàn)
相關(guān)文章
手把手帶你分析SpringBoot自動裝配完成了Ribbon哪些核心操作
這篇文章主要介紹了詳解Spring Boot自動裝配Ribbon哪些核心操作的哪些操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08Android開發(fā)中實現(xiàn)用戶注冊和登陸的代碼實例分享
這篇文章主要介紹了Android開發(fā)中實現(xiàn)用戶注冊和登陸的代碼實例分享,只是實現(xiàn)基本功能,界面華麗度就請忽略啦XD 需要的朋友可以參考下2015-12-12Java easyexcel導(dǎo)出報內(nèi)存溢出的問題解決
在Java開發(fā)時,使用EasyExcel處理大數(shù)據(jù)量導(dǎo)出可能遇到內(nèi)存溢出問題,本文深入分析了內(nèi)存溢出的原因,并提出了優(yōu)化策略,感興趣的可以了解一下2024-10-10【spring-boot】快速構(gòu)建spring-boot微框架的方法
本篇文章主要介紹了【spring-boot】快速構(gòu)建spring-boot微框架的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12Java存儲過程調(diào)用CallableStatement的方法
這篇文章主要介紹了Java存儲過程調(diào)用CallableStatement的方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-11-11MybatisPlus查詢數(shù)據(jù)日期格式化問題解決方法
MyBatisPlus是MyBatis的增強工具,支持常規(guī)的CRUD操作以及復(fù)雜的聯(lián)表查詢等功能,這篇文章主要給大家介紹了關(guān)于MybatisPlus查詢數(shù)據(jù)日期格式化問題的解決方法,需要的朋友可以參考下2023-10-10