您的位置:首页 > 教程文章 > 编程开发

Java求字符串中出现次数最多的字符串以及出现次数

:0 :2021-05-10 12:38:42

金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
此题的解题思路如下:
引入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 lists=new ArrayList();
//TreeSet是一个有序集合,TreeSet中的元素将按照升序排列
//通过TreeSet的不重复性,快速找到所有出现的字符串
TreeSet set=new TreeSet();
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);
//将排序好的字符数组转换为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 maxList=new ArrayList();*/
//用来保存出现最多的字符串和次数
HashMap hm=new HashMap();
//将出现过的字符遍历
Iterator 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 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持无名。

Java实现字符串解析为日期时间的方法实例
Java实现纪元秒和本地日期时间互换的方法【经典实例】

同类资源