首页 > 其他分享 >HJ23 删除字符串中出现次数最少的字符

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

时间:2024-04-24 17:14:42浏览次数:19  
标签:字符 ch map int min list 字符串 new HJ23

利用list的排序来得到最小次数的字符,其中需要注意对map做深拷贝!卡了很久,因为不知道如何处理最小这一点

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case 
            String str = in.nextLine();
            List finalList = deLeast(str);
            for(int i = 0;i<str.length();i++){
                if(finalList.contains(str.charAt(i))){
                    System.out.print(str.charAt(i));
                }
            }
                       
        }
    }

    static List deLeast(String str){
        Map<Character,Integer> map = new HashMap<Character,Integer>();
        for(int i = 0;i<str.length();i++){
            char c = str.charAt(i);
            if(map.containsKey(c)){
                int num = map.get(c);
                map.put(c,++num);
            }else{
                map.put(c,1);
            }
        }

        List<Integer> list = new ArrayList<Integer> (map.values());
        Collections.sort(list);
        Map<Character,Integer> mapCopy = new HashMap<Character,Integer>(map);
        for(char charAll : map.keySet()){
            if(map.get(charAll)==list.get(0)){
                mapCopy.remove(charAll);
            }
        }

        List<Character> listChar = new ArrayList<Character>(mapCopy.keySet());
        // for(int i = 0;i<list.size()-1;i++){
        //     map.remove()
        //     if(list.get(i)!=list.get(i+1)){
        //         list.removeIf(e -> e==)
        //     }
        // }
        // int min = list.get(0);
        // char[] chars = map.indexOf(min);

    //    List<Map.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet());
    //     //利用Collections的sort方法对list排序
    //     Collections.sort(entryList, new Comparator<Map.Entry<String, Integer>>() {
    //         @Override
    //         public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
    //             //正序排列,倒序反过来
    //             return o1.getValue() - o2.getValue();
    //         }
    //     });

        return listChar;
    }
}

实际上直接.values循环遍历得到最小即可,以及重新用stringbuilder来重建一个数组:来源-秋榆梧桐

   public String delete(String str) {
        // Map记录每个字母的次数
        Map<Character, Integer> map = new HashMap<>();
        for (char ch : str.toCharArray()) {
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }
        // 快速找出最少次数
        int min = Integer.MAX_VALUE;
        for (int times : map.values()) {
            min = Math.min(min, times);
        }
        StringBuilder res = new StringBuilder();
        for (char ch : str.toCharArray()) {
            if (map.get(ch) != min) {
                res.append(ch);
            }
        }
        return res.toString();
    }

标签:字符,ch,map,int,min,list,字符串,new,HJ23
From: https://www.cnblogs.com/xytang-mini-juan/p/18155874

相关文章

  • delphi Unix时间戳 转yyyy-mm-dd hh:mm:ss 格式字符串
    functionUnixTimeStampToDateTimeStr(UnixTimeStamp:Int64):string;varDateTimeValue:TDateTime;begin//第二个参数默认为true,设置为false,会默认以本地时区来+8小时,因为mysql里村的utc时间秒数DateTimeValue:=UnixToDateTime(UnixTimeStampdiv1000,False......
  • 字符串基础:Hash,KMP,trie
    Hash把一个字符串映射成一个整数,可以方便的比较两个字符串是否相等,计算\(Hash\)值:\[\displaystyle\sum_{i=0}^{len-1}(s[i]\timesB^{len-1-i})(mod\;M)\]这里的\(B\)是任取的一个大小合适的数,\(M\)就是为了把算出来的值映射到\([0,M-1]\)的范围内,既然是\(mod\),......
  • 151. 反转字符串中的单词
    题目链接:151.反转字符串中的单词这题主要是熟悉java一些库的调用,先放代码:classSolution{publicStringreverseWords(Strings){s=s.trim();//去除两边多余空格List<String>list=Arrays.asList(s.split("\\s+"));//将字符串按空格切割Coll......
  • JavaImprove--Lesson10--IO流-字符流,缓冲流,转换流,打印流,数据流
    一.IO流-字符流上期在字节流的学习中,了解到字节流写字符操作表现很不好,随时面临乱码的情况,一下写完全部数据的,内存可能不足,所以对于文本操作还需要专业的操作 而字符流就非常适合操作文本字符FileWirte文件字符输入流作用:以内存为基准,可以把文件的数据以字符的形式输入到......
  • Python字符串过滤器:正则表达式Regular Expression
    一、什么是正则表达式正则表达式是按照正确的既定规则、一种全语言类型Python、Java、JavaScript、PHP通用的表达式。用途:(1)根据规则抓取数据:配合爬虫、根据规则在文本中提取数据(2)根据规则验证数据:验证手机号、验证邮箱、验证身份证二、如何在Python中使用正则表达式在Python......
  • Python中列表和字符串的反转
    一、Python现成的反转功能:在Python中有专门进行列表反转的函数--reverse()l=[13,30,42,85,9,45]l.reverse()#[45,9,85,42,30,13]还可以使用切片操作进行列表反转l=[13,30,42,85,9,45]print(l[::-1])#[45,9,85,42,30,13]关于字符串的反转,并没......
  • Python 字符串格式化指南
    前言在Python中,字符串格式化是一种常见且重要的操作,用于将变量或值插入到字符串中,并控制输出的格式。本文将介绍几种常见的字符串格式化方法,帮助大家掌握在Python中有效地处理字符串的技巧。方法一:使用%操作符格式化字符串使用%操作符是一种传统的字符串格式化方法,可......
  • python 基础习题2--字符串切片技术
    1. 有如下字符串str='123456789'字符串切片技术,例如,返回输出从第三个开始到第六个的字符(不包含)即得到:345利用字符串切片技术,代码可以这么写:print(str[2:5])如果想返回如下八行结果,利用字符串切片技术,如何编写代码?12345678912345678134534567892412345678912345678......
  • mybatisplus分页中,模糊匹配一个字符串在列a或者列b下都可以筛选出的写法
    话不多说,直接上代码,and那句就对了LambdaQueryWrapper<类>wrapper=newLambdaQueryWrapper<类>().in(逻辑内容).like(正常逻辑内容).and(wrapperNew->wrapperNew.like(StringUtils.isNotEmpty(filter.getLocation()),......
  • excel判断字符串包含另一个字符串
    在Excel中,判断一个字符串是否包含另一个字符串,可以使用多种方法。以下是一些常用的方法:使用FIND函数。此函数会返回找到的字符串的首个字符的位置,如果返回#VALUE错误,则说明不包含目标字符串。1使用SUBSTITUTE函数。通过替换源字符串中的每个字符,然后与目标字符串比较,如果SUBSTI......