字符串中求出现次数最多字符
2018-04-07 本文已影响54人
HWilliamgo
思路:
- 引入TreeSet:通过集合快速找到所有出现的字符串
- 引入ArrayList:为了快速排序,再通过StringBuilder生成排序后的字符串
- 通过String api中的基本方法indexOf和lastIndexOf来计算TreeSet中每个字符串的最大值
- 如果出现相同的,则把相同的都记录在一个列表中。
- 记录第一个出现次数最多的字符(为了计算多个字符串相同情况)
- 计算最大字符串列表中哪些才是真正出现次数最多的、
import java.util.*;
public class MainJava {
public static void main(String[] args) throws Exception {
String input = "aavacadfdsfsdhshgWasdfasdfdddaaa";
System.out.println("the origin input is----" + input);
new MainJava().doString(input);
}
public void doString(String input) {
char[] chars = input.toCharArray();
ArrayList<String> lists = new ArrayList<>();
TreeSet<String> set = new TreeSet<>();
for (int i = 0, length = chars.length; i < length; i++) {
lists.add(String.valueOf(chars[i]));
set.add(String.valueOf(chars[i]));
}
System.out.println(set);
Collections.sort(lists);//将input字符串重排序
System.out.println(lists);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0, length = lists.size(); i < length; i++) {
stringBuilder.append(lists.get(i));
}
input = stringBuilder.toString();
System.out.println(input);//打印重排序后的字符串
int max = 0;
String maxString = "";
ArrayList<String> maxList = new ArrayList<String>();
Iterator it = set.iterator();//用Set的迭代器,刚好可以避免重复字符迭代的效率问题
while (it.hasNext()) {
String os = (String) it.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) {
//如果该字符刚好也是最大个数的字符,那么就添加进List记录就行。
maxList.add(os);
}
}
int index = 0;
for (int i = 0, len = maxList.size(); i < len; i++) {
if (maxList.get(i).equals(maxString)) {
index = i;
break;
}
}
System.out.println("max data");
for (int i = index, len = maxList.size(); i < len; i++) {
System.out.println(maxList.get(i) + "");
}
System.out.println();
System.out.println("max" + max);
}
}