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

描述

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

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

输入描述:

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

输出描述:

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

示例1

输入:

aabcddd

复制输出:

aaddd

我的原始代码,用时160ms, 消耗内存17428kb

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String in = scanner.next();HashMap<Character,Integer> map = new HashMap();for (int i = 0; i < in.length(); i++) {char ch = in.charAt(i);if(map.get(ch) == null){map.put(ch,1);}else{map.put(ch,map.get(ch)+1);}}List<Map.Entry<Character, Integer>> entryList = new ArrayList(map.entrySet());Collections.sort(entryList, new Comparator<Map.Entry<Character, Integer>>() {@Overridepublic int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {//正序排列,倒序反过来return o1.getValue() - o2.getValue();}});//遍历排序好的list,一定要放进LinkedHashMap,因为只有LinkedHashMap是根据插入顺序进行存储LinkedHashMap<Character, Integer> linkedHashMap = new LinkedHashMap<Character, Integer>();for (Map.Entry<Character,Integer> e : entryList) {linkedHashMap.put(e.getKey(),e.getValue());}Set<Character> integers = linkedHashMap.keySet();for (char c: integers){if(linkedHashMap.get((linkedHashMap.keySet().stream().findFirst()).get()) == linkedHashMap.get(c)){in = in.replaceAll(c+"","");}}System.out.println(in);
}

思路:

1.字符作为key,字符数作为value放入map中

2.排序

3.拿排序好的map取第一个值和其他作比较,相同则remove该字符

别人的39ms,10936kb

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String in = scanner.next();//统计各字符的数量HashMap<Character, Integer> map = new HashMap();for (int i = 0; i < in.length(); i++) {char ch = in.charAt(i);map.put(ch, map.getOrDefault(ch, 1) + 1);}//找最小的字符数Collection<Integer> values = map.values();Integer min = Collections.min(values);//通过最小字符数判断其他字符,并替换Set<Character> integers = map.keySet();for (char c : integers) {if (min == map.get(c)) {in = in.replaceAll(String.valueOf(c), "");}}System.out.println(in);
}

不得不说,代码简化了好几行

知识点总结:

1.  map.getOrDefault(key,defaultvalue)方法的使用, 如果当前key没有对应的value,则取默认值,也就是该方法的1第二个参数,有的话则获取实际的值。

2.map.values()可以直接获取value的值集合,好久没用map给忘记了还先获取key然后通过key获取value

3.Collections集合工具类的min方法和max方法的使用,可以直接获取集合的最小值和最大值。

4. char类型转字符串类型用String.valueOf()比 直接拼接空字符串更好。

5.String是不可变的,replace之后还是得赋值给原引用,否则不会改变字符串的值。细节可参考:Java 中的 String的不可变性/Java中replace()深层理解/剑指offer替换空格理解_我是菜狗救救我的博客-CSDN博客

6.LinkedHashMap的默认实现是按插入顺序排序的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【100天精通python】Day7:数据结构_列表 List的创建、删除、访问、遍历、统计、排序、推导等使用

目录 1 列表的创建 2 列表的删除 3 访问列表元素 4 遍历列表 5 添加修改删除列表元素 6 对列表进行统计和计算 7 对列表进行排序 8 列表推导式 9 多维列表 在Python中&#xff0c;列表是一种有序的可变数据类型&#xff0c;用于存储一组元素。 列表使用方括号“[] ”来…

Qt5.14.2下载及安装

1. 下载 https://download.qt.io/archive/qt/5.14/5.14.2/ 由于Qt 自从5.15版本开始&#xff0c;对非商业版本&#xff08;也就是开源版本&#xff09;&#xff0c;不提供已经制作好的离线exe安装包。所以&#xff0c;对于5.15&#xff08;含&#xff09;之后的版本&#xff…

软件智能:aaas系统全部内容 之序 零-AI三部曲 (重新汇总整理)

想法ideal 这次的重新整理是希望作为所有过去整理过和思考过的内容的一个类似词典编纂的工作&#xff0c;将之前的东西打乱以后能挂靠在这个词典的下面。 想法是以“人工智能”的语义为焦点&#xff08;统一行为特征&#xff0c;注1&#xff09;&#xff0c;并将语用作为结构…

Idea 设置类和方法的注释(获取参数)

Idea 添加注释&#xff1a;类注释、方法注释 类注释 方法注释 类注释 File–Setting–Editor–File and Code Templates–Class: 注释模板&#xff1a; /** **description: *author: fqtang*time: ${DATE} ${TIME}* */ 操作截图&#xff1a; 效果&#xff1a; 方法注释 为了…

图数据库Neo4j学习二——cypher基本语法

1命名规范 名称应以字母字符开头&#xff0c;不以数字开头&#xff0c;名称不应包含符号&#xff0c;下划线除外可以很长&#xff0c;最多65535( 2^16 - 1) 或65534字符&#xff0c;具体取决于 Neo4j 的版本名称区分大小写。:PERSON和:Person是:person三个不同的标签&#xff…

Langchain 使用 OpenAI 聊天模型

Langchain 使用 OpenAI 聊天模型 本笔记本介绍了如何开始使用 OpenAI 聊天模型。 示例代码&#xff0c; from langchain.chat_models import ChatOpenAI from langchain.prompts.chat import (ChatPromptTemplate,SystemMessagePromptTemplate,AIMessagePromptTemplate,Human…

Jmeter+Jenkins+Ant自动化持续集成环境搭建

一、安装准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具&#xff1a;apache-jmeter-2.13 3.ANT工具&#xff1a;apache-ant-1.9.7-bin 4.jenkins工具&#xff1a;jenkins-2.32.2 二、软件安装 1.JDK的安装 >双击JDK安装包&#xff0c;选择安装路径&#xff08;本人是…

详细总结Webpack5的配置和使用

打包工具 使用框架&#xff08;React、Vue&#xff09;&#xff0c;ES6 模块化语法&#xff0c;Less/Sass 等 CSS预处理器等语法进行开发的代码要想在浏览器运行必须经过编译成浏览器能识别的 JS、CSS 等语法&#xff0c;才能运行。 所以需要打包工具帮我们做完这些事。除此之…

3、C# 方法构成

上一节,我们讲述了程序的基本构成。由大到小分别为”解决方案-->项目-->类-->方法“。 这一节,我们讲讲方法。 方法可以说是程序的基本构成单位。假如把方法抽象成点的话,我们可以认为程序是一个树状的结构。树根,就是我们的起点方法,也叫主方法。这一点,基本…

决策树(Decision Tree)

决策树的原理 决策树算法是一种基于树结构的分类和回归算法。它通过对数据集进行递归地分割&#xff0c;构建一个树形模型&#xff0c;用于预测目标变量的值。 决策树的构建过程基于以下原理&#xff1a; 1. 特征选择&#xff1a;选择最佳的特征来进行数据集的分割。常用的…

堆排序与直接选择排序

目录 一、直接选择排序 1.基本思想 2.直接选择排序的特性总结 3.代码实现&#xff1a; 二、堆排序 1. 概念&#xff1a; 2.图像实现&#xff1a; 3.代码实现&#xff1a; 一、直接选择排序 1.基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09…

MySQL多表连接查询练习

准备工作 创建student表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) );创建score表 CREATE TABLE score ( id INT(10) NOT …

NetSuite ERP顾问的进阶之路

目录 1.修养篇 1.1“道”是什么&#xff1f;“器”是什么&#xff1f; 1.2 读书这件事儿 1.3 十年计划的力量 1.3.1 一日三省 1.3.2 顾问损益表 1.3.3 阶段课题 2.行为篇 2.1协作 2.2交流 2.3文档管理 2.4时间管理 3.成长篇 3.1概念能力 3.1.1顾问的知识结构 …

大数据学习05-Kafka分布式集群部署

系统环境&#xff1a;centos7 软件版本&#xff1a;jdk1.8、zookeeper3.4.8、hadoop2.8.5 本次实验使用版本 kafka_2.12-3.0.0 一、安装 Kafka官网 将安装包上传至linux服务器上 解压 tar -zxvf kafka_2.12-3.0.0.tgz -C /home/local/移动目录至kafka mv kafka_2.12-3.0…

护城河理论

护城河理论 护城河理论|来自股神巴菲特&#xff0c;是指投资的企业在某一方面的核心竞争力。 模型介绍 在2000年的伯克希尔哈撒韦的年会上&#xff0c;巴菲特说&#xff1a;让我们来把护城河作为一个伟大企业的首要标准&#xff0c;保持它的宽度&#xff0c;保持它不被跨越。我…

听GPT 讲K8s源代码--pkg(五)

在 Kubernetes 中&#xff0c;kubelet 是运行在每个节点上的主要组件之一&#xff0c;它负责管理节点上的容器&#xff0c;并与 Kubernetes 控制平面交互以确保容器在集群中按照期望的方式运行。kubelet 的代码位于 Kubernetes 代码库的 pkg/kubelet 目录下。 pkg/kubelet 目录…

算法-快速排序-java

下面是使用Java实现快速排序的一种方法&#xff1a; public class QuickSort {public static void quickSort(int[] arr, int low, int high) {if (low < high) {// 将数组划分为两个子数组&#xff0c;并获取划分点的索引int pivotIndex partition(arr, low, high);// 递…

数学建模-分类模型 Fisher线性判别分析

论文中1. 判别分析系数 2. 分类结果 多分类问题 勾选内容和上面一样

【C++】入门 --- 命名空间

文章目录 &#x1f36a;一、前言&#x1f369;1、C简介&#x1f369;2、C关键字 &#x1f36a;二、命名冲突&#x1f36a;三、命名空间&#x1f369;1、命名空间定义&#x1f369;2、命名空间的使用 &#x1f36a;四、C输入&输出 &#x1f36a;一、前言 本篇文章是《C 初阶…

机器人中常见的定位技术

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言机器人中常见的定位方案惯性导航卫星导航组合导航UWB定位2D激光SLAM3D激光SLAM二维码定位视觉SLAM前言 认知有限,望大家多多包涵,有什么问题也希…