您的位置:首页 > 编程语言 > Java开发

一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。

2017-06-02 16:19 686 查看
最近在《JAVA程序员面试宝典》上看到这样一道题:

         一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。



         看了一下书中的解题思路感觉比较复杂,不容易理解。写法上效率也比较低。这里根据自己的想法试着写了另外一种方法。欢迎大家讨论指导。

package main.java.Chapter_07.Section_1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class Example3 {
public static void main(String[] args) {
//为了测试性能,字符串写的很长。
String input ="avzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzc"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh"
+ "adfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdhshgWasdfasdfffffdddaaaavzcadfdsfsdh";
Long time1 = new Date().getTime();
new Example3().doString2(input);
Long time2 = new Date().getTime();
new Example3().doString(input);
Long time3 = new Date().getTime();
System.out.println("#################################");
System.out.println(time2 - time1);
System.out.println(time3 - time2);
}

/**
* 自己的写法
* 思路:
* (1)将字符串转换成char数组
* (2)将char放入map中,以char为key,char出现的次数为value。
* (3)用max记录出现最多的次数
* (4)遍历map找出最大次数和出现最多的字符
* @param input
*/
public void doString2(String input){
Map<Character,Integer> map = new HashMap<Character,Integer>();

char[] chars = input.toCharArray();

Integer max = 0;

for (char c : chars) {
Integer count = map.get(c);
count = count ==null?1:++count;
map.put(c, count);
if(count>max){
max = count;
}
}

System.out.println("max "+ max);

Set<Character> set = map.keySet();
for (Character c : set) {
if(max.compareTo(map.get(c))==0){
System.out.println("max data "+c);
}
}

}

/**
* 书中的写法
* @param input
*/
public void doString(String input){
char[] chars = input.toCharArray();
ArrayList lists = new ArrayList<>();
TreeSet set = new TreeSet<>();
for (int i = 0; i < chars.length; i++) {
lists.add(String.valueOf(chars[i]));
set.add(String.valueOf(chars[i]));
}
// System.out.println(set);
Collections.sort(lists);
// System.out.println(lists);

StringBuffer sb = new StringBuffer();
for (int i = 0; i < lists.size(); i++) {
sb.append(lists.get(i));
}

input =sb.toString();
// System.out.println(input);

int max = 0 ;
String maxString = "";
ArrayList maxlist = new ArrayList<>();

Iterator its =set.iterator();
while (its.hasNext()) {
String os = (String) its.next();
int begin = input.indexOf(os);
int end = input.lastIndexOf(os);
int value = end -begin +1;
if(value > max){
max = value;
maxString = os; //记录最长的字符串第一次出现的地方,为了下面过滤
maxlist.add(os);
}else if(value == max){
maxlist.add(os);
}
}

//这个地方逻辑有点绕。找出 第一次最长字符串出现的位置,在这之前加入 maxlist中的数据都是假的
int index =0;
for (int i = 0; i < maxlist.size(); i++) {
if(maxlist.get(i).equals(maxString)){
index = i;
break;
}
}

System.out.println("max data");
for (int i = index; i < maxlist.size(); i++) {
System.out.println(maxlist.get(i));
}
System.out.println("max "+max);
}
}


运行结果:
max 2132
max data d
max data
d
max 2132
#################################
6
32
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐