【华为OJ23】删除字符串中出现次数最少的字符

来源:互联网 发布:everying软件 编辑:程序博客网 时间:2024/05/17 03:31

题目描述

实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。


输入描述:

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。



输出描述:

删除字符串中出现次数最少的字符后的字符串。


输入例子:
abcdd

输出例子:

dd

import java.util.*;public class Main{    public static void main(String[] args){        Scanner sc= new Scanner(System.in);        while(sc.hasNext()){            String str = sc.next();            System.out.println(getStr(str));        }        sc.close();    }        public static String getStr(String str){        if(str == null)            return str;        Map<Character,Integer> map = new HashMap<>();        //1 存储字符,统计每个字符出现的次数        for(int i=0;i<str.length();i++){            char c = str.charAt(i);            if(map.containsKey(c)){                map.put(c,map.get(c)+1);            }else{                map.put(c,1);            }        }       //2 遍历集合,获取出现次数最少的字符        int min = Integer.MAX_VALUE;        for(Map.Entry<Character,Integer> entry:map.entrySet()){            Integer value = entry.getValue();            if(value < min)                min = value;        }                //3 添加出现次数最少的字符        Set<Character> set = new HashSet<>();        for(Map.Entry<Character,Integer> entry:map.entrySet()){            Character c = entry.getKey();             Integer value = entry.getValue();            if(value == min)set.add(c);        }                //4 从原字符串中删除次数最少的字符        StringBuilder sb = new StringBuilder(128);        for(int i=0;i<str.length();i++){            char  c = str.charAt(i);            //set可以添加,说明此字符c不是出现次数最少的字符            if(!set.contains(c)){                sb.append(c);            }        }                return sb.toString();                    }}
























0 0