Java求字符串中出現(xiàn)次數(shù)最多的字符串以及出現(xiàn)次數(shù)
金山公司面試題:一個(gè)字符串中可能包含a~z中的多個(gè)字符,如有重復(fù),如String data="aavzcadfdsfsdhshgWasdfasdf",求出現(xiàn)次數(shù)最多的那個(gè)字母及次數(shù),如有多個(gè)重復(fù)的則都求出。
此題的解題思路如下:
引入TreeSet:通過(guò)集合快速找到所有出現(xiàn)過(guò)的字符串
引入ArrayList:為了快速排序,再通過(guò)StringBuffer生成排序后的字符串
通過(guò)String的indexOf方法和lastIndexOf方法來(lái)計(jì)算每個(gè)字符串出現(xiàn)的次數(shù)最大值
使用HashMap存儲(chǔ)出現(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是一個(gè)有序集合,TreeSet中的元素將按照升序排列
//通過(guò)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>();*/
//用來(lái)保存出現(xiàn)最多的字符串和次數(shù)
HashMap<String, Integer> hm=new HashMap<String, Integer>();
//將出現(xiàn)過(guò)的字符遍歷
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());
}
}
}
}
運(yùn)行結(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ù)相同時(shí),也可以將它們都打印出來(lái)。
如
public static void main(String[] args) {
String input = "abbcccddddeeeeeffffffaaaaabbb";
new SortTest().doString(input);
}
運(yùn)行結(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
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java案例使用集合方法實(shí)現(xiàn)統(tǒng)計(jì)任意字符串中字符出現(xiàn)的次數(shù)
- Java實(shí)現(xiàn)統(tǒng)計(jì)字符串出現(xiàn)的次數(shù)
- Java統(tǒng)計(jì)一個(gè)字符串在另外一個(gè)字符串出現(xiàn)次數(shù)的方法
- Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法示例
- Java獲取指定字符串出現(xiàn)次數(shù)的方法
- java統(tǒng)計(jì)字符串中重復(fù)字符出現(xiàn)次數(shù)的方法
- java統(tǒng)計(jì)字符串中指定元素出現(xiàn)次數(shù)方法
- java求數(shù)組元素重復(fù)次數(shù)和java字符串比較大小示例
- java字符串比較獲取字符串出現(xiàn)次數(shù)的示例
- JAVA統(tǒng)計(jì)字符串中某個(gè)字符出現(xiàn)次數(shù)的方法實(shí)現(xiàn)
相關(guān)文章
Red?Hat?安裝JDK與IntelliJ?IDEA的詳細(xì)過(guò)程
YUM是基于Red Hat的Linux發(fā)行版的一個(gè)強(qiáng)大而用戶友好的包管理工具,這篇文章主要介紹了Red?Hat安裝JDK與IntelliJ IDEA,需要的朋友可以參考下2023-08-08
springboot 默認(rèn)靜態(tài)路徑實(shí)例解析
這篇文章主要介紹了springboot 默認(rèn)靜態(tài)路徑實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Mybatis如何使用動(dòng)態(tài)語(yǔ)句實(shí)現(xiàn)批量刪除(delete結(jié)合foreach)
這篇文章主要介紹了Mybatis如何使用動(dòng)態(tài)語(yǔ)句實(shí)現(xiàn)批量刪除(delete結(jié)合foreach),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
詳解Spring cloud使用Ribbon進(jìn)行Restful請(qǐng)求
這篇文章主要介紹了詳解Spring cloud使用Ribbon進(jìn)行Restful請(qǐng)求,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
簡(jiǎn)單了解Java編程中對(duì)異常處理的運(yùn)用
這篇文章主要簡(jiǎn)單介紹了Java編程中對(duì)異常處理的運(yùn)用,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
Spring Data分頁(yè)與排序的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Spring Data分頁(yè)與排序的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12

