一、问题描述
* 删除一个字符串里出现次数最多的子字符串 如果有多个出现次数相同的并且出现次数最多则将多个全部删除
* 比如abbccd得到结果 ad
二、算法
删除最多的
/**
* Delete the char which appears most
* @param str
*/
public void deleteStr(String str) {
Map<Character, Integer> subMap = new TreeMap<Character, Integer>();
List<Map.Entry<Character, Integer>> infoIds = new ArrayList<Map.Entry<Character, Integer>>(
subMap.entrySet());
char[] charCell = str.toCharArray();
for (int i = 0; i < charCell.length; i++) {
if(subMap.containsKey(charCell[i])) {
subMap.put(charCell[i], subMap.get(charCell[i]) + 1);
} else {
subMap.put(charCell[i], 1);
}
}
for (Map.Entry<Character, Integer> entry : subMap.entrySet()) {
infoIds.add(entry);
}
Collections.sort(infoIds, new Comparator<Map.Entry<Character, Integer>>() {
public int compare(Map.Entry<Character, Integer> o1,Map.Entry<Character, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
int count = infoIds.get(0).getValue();
for (Map.Entry<Character, Integer> entry :infoIds) {
if(entry.getValue() == count) {
str = str.replaceAll(Character.toString(entry.getKey()),"");
} else {
break;
}
}
System.out.println(str);
}
(o2.getValue() - o1.getValue()变为这则是最少的)
public static void main(String[] args) {
Main31 m = new Main31();
String str = "abbccd";
m.deleteStr(str);
}
结果:
ad
看点:创建List<Map.entry<Character,Integer>>的list,然后用collections.sort(list.comparator);注意string中replace(a,b)a为字符串内容,b要替换成的值。