题解 | #删除字符串中出现次数最少的字符#

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

https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
         Scanner in = new Scanner(System.in);
        String str = in.next();
        //用list集合保存原始的字符串用来后续删除出现次数最少的字符
        ArrayList<Character> list = new ArrayList<>();
        //map集合用来记录各个字符出现的次数
        Map <Character,Integer> map = new LinkedHashMap();

        //遍历字符串添加到list和map
        for(int i=0;i<str.length();i++){
            Character substr =  str.charAt(i);
            list.add(substr);
            if(!map.containsKey(substr)){
                map.put(substr,1);
            }else{
                map.put(substr,map.get(substr)+1) ;
            }
        }
        //拿到最小的出现次数(可能不止一个字符)
        Character minkey=list.get(0);
        Set<Character> keyset =  map.keySet();
        int minvalue = map.get(minkey);
        for(Character tempkey:keyset){
            int value = map.get(tempkey);
            if(value<minvalue){
                minvalue = value;
                minkey=tempkey;
            }
        }
        //把要删除的字符添加到removelist集合
        ArrayList<Character> removelist = new ArrayList<>();
        for(Character tempkey:keyset){
            if(map.get(tempkey)==minvalue){
                removelist.add(tempkey);
            }
        }
        //用removeall方法传入removelist参数删除list集合中出现次数最少的字符
        list.removeAll(removelist);
        //使用StringBuilder把list集合里的字符连接成字符串返回
        StringBuilder result =  new StringBuilder();
        for (Character c : list) {
            result.append(c);
        }
        System.out.println(result);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务