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


    本文解决问题的用意主要在于练习 Java Stream API 和 lambda 表达式,以及各种集合方法。

    1、完整题目

    删除字符串中出现次数最少的字符_牛客题霸_牛客网

    描述

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

    数据范围:输入的字符串长度满足 1≤n≤20  ,保证输入的字符串中仅出现小写字母

    输入描述:

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

    输出描述:

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

    示例1

    输入:aabcddd

    输出:aaddd

    2、Java代码(详细注释版)

    • 将字符串中的字符通过 Stream 和 lambda表达式 加入到 HashMap 中,记录每个字符的个数;
    • 通过 Collections.min() 方法找到 map 中最小值对应的 value值;

    • 通过Stream的filter方法过滤掉数量最少的元素,mapToObj将类型转化为char,最后无换行输出。

    1. import java.util.Scanner;
    2. import java.util.HashMap;
    3. import java.util.Collections;
    4. import java.util.Map.Entry;
    5. public class Main {
    6. public static void main(String[] args) {
    7. Scanner in = new Scanner(System.in);
    8. while (in.hasNext()) {
    9. String str = in.next();
    10. //将字符串中的字符通过 Stream 和 lambda表达式 加入到 HashMap 中,记录每个字符的个数
    11. HashMap map = new HashMap<>();
    12. str.chars().forEach(c -> map.put(c, map.containsKey(c)? map.get(c) + 1: 1));
    13. //通过 Collections.min() 方法找到 map 中最小值对应的 value值
    14. int minNum = Collections.min(map.entrySet(), Entry.comparingByValue()).getValue(); //这里的.getValue()可省略
    15. //通过Stream的filter方法过滤掉数量最少的元素,mapToObj将类型转化为char,最后无换行输出
    16. str.chars().filter(c -> map.get(c)>minNum).mapToObj(c-> (char)c).forEach(System.out::print);
    17. }
    18. }
    19. }

  • 相关阅读:
    Redis之Lua脚本
    Oracle EBS Interface/API(44)- 销售订单发运明细行拆分
    Arduino PID整定
    会议信息管理系统SSM记录(五)
    手撕二叉树
    区间信息维护与查询【树状数组 】 - 原理2 多维树状数组
    【算法】Reverse Integer
    物体颜色的来源
    Mybatis懒加载
    latex小节标题如何靠左显示
  • 原文地址:https://blog.csdn.net/m0_37738114/article/details/134330999