一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。〔金山公司面试题〕
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;
public class FindRepeatChar {
public static void doString(String strInput) {
char[] chars = strInput.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));
}
strInput = sb.toString();
System.out.println(strInput);
int max = 0;
String maxString = "";
ArrayList maxList = new ArrayList();
for (Iterator its = set.iterator(); its.hasNext();) {
String os = (String) its.next();
int begin = strInput.indexOf(os);
int end = strInput.lastIndexOf(os);
int value = end - begin + 1;
if (value > max && value > 1) {
max = value;
maxString = os;
maxList.add(os);
} else if (value == max) {
maxList.add(os);
}
}
System.out.println("出现最多的字符为:");
for (int i = 0; i < maxList.size(); i++) {
System.out.println(maxList.get(i) + "");
}
System.out.println("出现最多的次数为:" + max);
}
public static void main(String[] args) {
String strInput = new String("aavzcadfdsfsdhshgWasdfasdf");
doString(strInput);
}
}
上面的算法有问题:
下面是修改以后的:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;
public class FindRepeatChar {
public static void doString(String strInput) {
char[] chars = strInput.toCharArray();
//去掉重复的字符串
TreeSet set = new TreeSet();
for (int i = 0; i < chars.length; i++) {
set.add(String.valueOf(chars[i]));
}
System.out.println(set);
System.out.println(strInput);
int max = 0;
//获取每种字符串出现的次数,并求出最大的出现次数
HashMap<String,Integer> maps=new HashMap<String,Integer>();
for (Iterator its = set.iterator(); its.hasNext();) {
String os = (String) its.next();
int value=countToken(strInput,os);
if(value>max)
{
max=value;
}
maps.put(os, value);
}
//把出现次数最大的放入List中
List maxList=new ArrayList();
for(Map.Entry<String,Integer> entry:maps.entrySet())
{
String key=entry.getKey();
Integer val=entry.getValue();
if(val==max )
{
maxList.add(key);
}
}
System.out.println("出现最多的字符为:");
for (int i = 0; i < maxList.size(); i++) {
System.out.println(maxList.get(i) + "");
}
System.out.println("出现最多的次数为:" + max);
}
//获取出现次数
public static int countToken(String str, String token) {
int count = 0;
while (str.indexOf(token) != -1) {
count++;
str = str.substring(str.indexOf(token) + token.length());
}
// System.out.println(token + "出现的次数:" + count);
return count;
}
public static void main(String[] args) {
String strInput = new String("你是猪你是猪你是猪你是猪你是猪你是猪你是猪你是猪你是猪afdadfdasffafadsfdhjgfhjgfhfadsssssss");
doString(strInput);
doString("aavzcadfdsfsdhshgWasdfasdf");
doString("aasss");
}
}

本文介绍了一种使用Java编程语言找出给定字符串中出现频率最高的字符的方法,并通过优化算法提高了查找效率。

5104

被折叠的 条评论
为什么被折叠?



