删除一个字符串里出现次数最多(少)的子字符串

来源:互联网 发布:js屏蔽查看网页源代码 编辑:程序博客网 时间:2024/04/29 22:13

一、问题描述

 * 删除一个字符串里出现次数最多的子字符串 如果有多个出现次数相同的并且出现次数最多则将多个全部删除
 * 比如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要替换成的值。


0 0
原创粉丝点击