Java:Map和Set练习

目录

查找字母出现的次数

只出现一次的数字

坏键盘打字


查找字母出现的次数

这道题的思路在后面的题目过程中能用到,所以先把这题给写出来

题目要求:给出一个字符串数组,要求输出结果为其中每个字符串及其出现次数。

思路:我们可以把数组里的字符串按顺序放进map中,对于没被放进去过的字符串,放进去次数为1,之前被放进过去的字符串,那就在其上重新放入,并把次数重新加1.

举个例子,输出的内容是:

"this", "dog", "cat", "cat", "this", "dog"

现在是把每个元素放进去,在没遇到一样数据之前的过程,如是上面所示,如果遇到了一样的数据, 

 

这个操作看起来可能是把第二个cat放进去了,但是实际上是把cat重新输入了,然后把Key值输入为2了。因为map其中节点的样子如上图所示。

代码部分如下

import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Test {public static Map<String, Integer> countWords(String[] words){Map<String, Integer> map = new HashMap<>();for(String word : words){if(map.get(word) == null){map.put(word, 1);}else {int val = map.get(word);map.put(word, val+1);}}return map;}public static void main(String[] args) {String[] words = {"this", "dog", "cat", "cat", "this", "dog"};Map<String, Integer> map = countWords(words);Set<Map.Entry<String, Integer>> entryset = map.entrySet();for (Map.Entry<String, Integer> entry : entryset){System.out.println("Key: " + entry + "  Val: " + entry.getKey());}}
}


只出现一次的数字

题目链接:只出现一次的数字 - 力扣(LeetCode)

题目描述:给一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

思路:这里的思路和上面的 查找字母出现的次数 有些像。依次把元素放到set中,如果set中没有该元素,就把该元素放进去,如果有,就把这个元素从set中删去。最后输出set中的元素

以 {1,2,3,4,1,2,3} 为例,当第一次往里放,没有遇到重复的元素时,如下图

按照数组的顺序,接着向下放,就会遇到重复的元素,这时候就要把set中的元素给删除了

 后面的2,3也要依次从set中删除。

public static int singleNumber(int[] nums){HashSet<Integer> set = new HashSet<>();for (int i = 0; i < nums.length; i++) {if(set.contains(nums[i])){set.remove(nums[i]);}else{set.add(nums[i]);}}for (int i = 0; i < nums.length; i++) {if(set.contains(nums[i])){return nums[i];}}return -1;}public static void main(String[] args) {int[] array = {1,2,3,4,1,2,3};System.out.println(singleNumber(array));}

运行结果如下


坏键盘打字

题目链接:

题目描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入在两行中分别给出应该输入的文字、以及实际输入的文字

按照发现顺序,在一行中输出坏掉的键。其中英语字母只输出大写,每个坏键只输入一次。

示例

输入

7_This_is_a_test

_hs_s_a_es

输出

7TI

题目思路:该题的思路在于如何找出坏键,这里提供一种思路,先把实际输入的数据放到set中,然后再把应该输入的文字遍历一遍,如果其中有set中没有的数据,那些没有的数据便是坏掉的键。

public static void func(String str1, String str2){//将字符串大写str1 = str1.toUpperCase();str2 = str2.toUpperCase();HashSet<Character> setAct = new HashSet<>();for (int i = 0; i < str2.length(); i++) {char ch = str2.charAt(i);setAct.add(ch);}for (int i = 0; i < str1.length(); i++) {char ch = str1.charAt(i);if(!setAct.contains(ch)){System.out.print(ch);}}}public static void main(String[] args) {func("7_This_is_a_test", "_hs_s_a_es");}

这样的代码还是存在问题,没办法把其中重复出现的元素给消去,输出的结果是

现在问题变成了如何去重,这部分不难能想到,我们可以创建一个setBroken来存放已经查找到的坏键,如果set和setBroken中都没有这个元素才打印.

public class Test {public static void func(String str1, String str2){str1 = str1.toUpperCase(Locale.ROOT);str2 = str2.toUpperCase(Locale.ROOT);HashSet<Character> setAct = new HashSet<>();for (int i = 0; i < str2.length(); i++) {char ch = str2.charAt(i);setAct.add(ch);}//第一步是把不同的数给挑出来,然后对于重复输出的数据给去重HashSet<Character> setBroken = new HashSet<>();for (int i = 0; i < str1.length(); i++) {char ch = str1.charAt(i);if(!setAct.contains(ch) && !setBroken.contains(ch)){setBroken.add(ch);System.out.print(ch);}}}public static void main(String[] args) {func("7_This_is_a_test", "_hs_s_a_es");}
}

输出结果为

这次的内容就到这里,我们下篇文章再见

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

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

相关文章

【宠粉赠书】大模型项目实战:多领域智能应用开发

在当今的人工智能与自然语言处理领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;凭借其强大的生成与理解能力&#xff0c;正在广泛应用于多个实际场景中。《大模型项目实战&#xff1a;多领域智能应用开发》为大家提供了全面的应用技巧和案例&#xff0c;帮助开发者深…

【商汤科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Chromium HTML5 新的 Input 类型week对应c++

一、Input 类型: week week 类型允许你选择周和年。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head><body><form action"demo-form.php">选择周: <inp…

Nginx防盗链配置

1. 什么是盗链? 盗链是指服务提供商自己不提供服务的内容&#xff0c;通过技术手段绕过其它有利益的最终用户界面&#xff08;如广告&#xff09;&#xff0c;直接在自己的网站上向最终用户提供其它服务提供商的服务内容&#xff0c;骗取最终用户的浏览和点击率。受益者不提供…

Oracle+11g+笔记(8)-备份与恢复机制

Oracle11g笔记(8)-备份与恢复机制 8、备份与恢复机制 8.1 备份与恢复的方法 数据库的备份是对数据库信息的一种操作系统备份。这些信息可能是数据库的物理结构文件&#xff0c;也可能是某一部分数 据。在数据库正常运行时&#xff0c;就应该考虑到数据库可能出现故障&#…

基于Multisim的篮球比赛电子记分牌设计与仿真

一、设计任务与要求 设计一个符合篮球比赛规则的记分系统。 &#xff08;1&#xff09;有得1分、2分和3分的情况&#xff0c;电路要具有加、减分及显示的功能。 &#xff08;2&#xff09;有倒计时时钟显示&#xff0c;在“暂停时间到”和“比赛时间到”时&#xff0c;发出声光…

CTF-PWN: 什么是_IO_FILE?

重要概念:fopen()返回的是一个结构体的指针 _IO_FILE 结构体在什么时候被创建&#xff1f; _IO_FILE 结构体的实例是在程序使用标准 I/O 函数&#xff08;如 fopen、fclose、fread、fwrite 等&#xff09;时创建和管理的。这个结构体实际上是 GNU C Library (glibc) 用于处理…

Apache paimon-CDC

CDC集成 paimon支持五种方式通过模式转化数据提取到paimon表中。添加的列会实时同步到Paimon表中 MySQL同步表:将MySQL中的一张或多张表同步到一张Paimon表中。MySQL同步数据库:将MySQL的整个数据库同步到一个Paimon数据库中。API同步表:将您的自定义DataStream输入同步到一…

电子信息-毕业设计选题推荐

人工智能与电子信息工程的融合 基于深度学习的电子信息系统故障诊断 人工智能算法在电子信息工程中的优化应用 电子信息工程中的智能图像识别技术 无线传感器网络 无线传感器网络在环境监测中的电子信息采集 多传感器融合的无线传感器网络应用 无线传感器网络中的数据压缩算法与…

linux 删除当前目录下修改时间超过1天的文件

在Linux中&#xff0c;你可以使用find命令结合-mtime选项来删除当前目录下修改时间超过1天的文件。以下是具体的命令示例&#xff1a; find . -type f -mtime 1 -delete解释一下上述命令&#xff1a; find&#xff1a;这是用于在文件系统中查找文件和目录的命令。.&#xff1…

【面试全纪实 | Linux 01】请回答,你真的了解Linux吗?

1. 什么是Linux Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位 硬件。Linux继承了Unix以网络为核心的设计思想&#…

代码随想录训练营Day11 | 226.翻转二叉树 - 101. 对称二叉树 - 104.二叉树的最大深度 - 111.二叉树的最小深度

226.翻转二叉树 题目链接&#xff1a;226.翻转二叉树思路&#xff1a;遍历二叉树&#xff0c;遍历的时候交换左右节点即可代码&#xff1a; TreeNode* invertTree(TreeNode* root) {reverse(root);return root;}// 迭代法&#xff0c;层序遍历void f2(TreeNode* root) {queue…

易友BOM管理软件

易友BOM管理软件介绍 易友BOM管理软件是一款功能齐全、操作简便、安全可靠的BOM管理系统。它为企业提供了多方面的BOM管理解决方案&#xff0c;帮助企业提高生产效率、降低成本、增强灵活性并提升竞争力。制造企业&#xff0c;都可以通过易友BOM管理软件来实现BOM管理的优化和…

安全见闻-二进制与网络安全的关系

一、二进制的基本概念 二、二进制在网络安全中的重要性 三、二进制安全的概念与范畴 1. 二进制安全的定义 2. 范畴 四、二进制安全的渗透测试方法 1. 静态分析 2. 动态分析 3. 模糊测试 4. 漏洞利用 5. 代码审计 五、结论 学习视频泷羽sec&#xff1a;安全见闻&…

git 怎么保留某个文件夹忽略其下面的所有文件?

在 Git 中&#xff0c;如果你想要保留某个文件夹&#xff08;比如 folder/&#xff09;但忽略其下面的所有文件&#xff0c;可以使用 .gitignore 文件来实现。需要注意的是&#xff0c;Git 不会自动创建空目录。因此&#xff0c;为了让 Git 记录这个空目录&#xff0c;你需要在…

【模型学习之路】手写+分析bert

手写分析bert 目录 前言 架构 embeddings Bertmodel 预训练任务 MLM NSP Bert 后话 netron可视化 code2flow可视化 fine tuning 前言 Attention is all you need! 读本文前&#xff0c;建议至少看懂【模型学习之路】手写分析Transformer-CSDN博客。 毕竟Bert是tr…

不用求人,4个方法快速恢复小米手机删除短信

手机短信作为我们日常办理事情的重要验收通道&#xff0c;往往承载着许多重要的信息。然而&#xff0c;由于各种原因&#xff0c;我们可能会不小心删除了重要的短信。那么&#xff0c;小米手机用户如何恢复这些被删除的短信呢&#xff1f;接下来&#xff0c;我们将分点为您详细…

爆肝整理14天AI工具宝藏合集(三)

&#x1f6e0;️以下是我为大家整理的AI工具宝藏合集&#xff08;三&#xff09;&#xff1a; &#x1f4a1;AI搜索 1️⃣ 天工AI搜索 2️⃣ 秘塔AI搜索 3️⃣ 夸克AI搜索 4️⃣ 开搜AI搜索 &#x1f4a1; AI视频 1️⃣ 可灵AI 2️⃣ 即梦AI 3️⃣ Vidu 4️⃣ Stable Video …

vue版本太低无法执行vue ui命令

连接 ui和create目前都只支持3.0以后得版本才能使用 https://blog.csdn.net/m0_67318913/article/details/136775252?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-136775252-blog-121204604.235v43pc_blog_bottom_relevance…

ETL集成工具丨如何运用ETLCloud单步调试断点功能

在现代数据处理领域&#xff0c;ETLCloud 的单步调试断点功能正成为数据管理的重要工具。ETLCloud 是一个强大的云端数据处理平台&#xff0c;它提供了灵活的单步调试功能&#xff0c;使得用户能够逐步跟踪和分析数据处理流程。本文将探讨如何运用 ETLCloud 的单步调试断点功能…