题目:一个字符串可能包含多个字符,求出现次数最多的那个字符及 次数。如有多个重复的则都求出。
自己写的代码:
package com.li.test1.classes;
/**
* 给定一个字符串,如"abcdabcdabcd",输出重复最多的字符及其重复次数。
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Reduplicate {
public static Map<Character, Integer> map = new HashMap();
public static Map<Character, Integer> getResult(Map<Character, Integer> map) {
List<Character> chararray = new ArrayList();
List<Integer> intarray = new ArrayList();
for (char c : map.keySet()) {
chararray.add(c);
intarray.add(map.get(c));
}
int max=0;
for (int i = 0; i < intarray.size() ; i++) {
if (intarray.get(max) < intarray.get(i )) {
map.remove(chararray.get(max));
max=i;
} else if(intarray.get(max) > intarray.get(i)) {
map.remove(chararray.get(i));
}
}
return map;
}
public static void updateCount(char c) {
if (map.containsKey(c)) {
Integer i = map.get(c);
i++;
map.remove(c);
map.put(c, new Integer(i));
}
}
public static Map<Character, Integer> findReduplicate(char[] array) {
for (char c : array) {
if (map.containsKey(c)) {
updateCount(c);
} else {
map.put(c, new Integer(1));
}
}
return getResult(map);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "acacacacbdbdbbbbb0000000@@@@@@@";
long start = System.nanoTime();
System.out.println(findReduplicate(str.toCharArray()));
System.out.println(System.nanoTime() - start);
}
}
运行结果:
{0=7, @=7, b=7}
4019020
面试宝典给出的答案:
package com.li.test1.classes;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;
public class MsbdReduplicate {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "acacacacbdbdbbbbb0000000@@@@@@@";
long start = System.nanoTime();
new MsbdReduplicate().doString(str);
System.out.println(System.nanoTime() - start);
}
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);
}
}
int index = 0;
for (int i = 0; i < maxlist.size(); i++) {
if (maxlist.get(i).equals(maxString)) {
index = i;
break;
}
}
for (int i = index; i < maxlist.size(); i++) {
System.out.println(maxlist.get(i) + " ");
}
System.out.println("max:" + max);
}
}
运行结果:
[0, @, a, b, c, d]
[0, 0, 0, 0, 0, 0, 0, @, @, @, @, @, @, @, a, a, a, a, b, b, b, b, b, b, b, c, c, c, c, d, d]
0000000@@@@@@@aaaabbbbbbbccccdd
0
@
b
max:7
3424993