算法每日一题:统计出现过一次的公共字符串 | 哈希 | getOrDefault()

大家好,我是星恒
今天给大家带来的又是一道经典的哈希的题目;这道题本身并不难,但他将getOrDefault()函数利用的简直不要太优雅了,很适合作为理解Map应用的学习题目

题目:
给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。
示例:
示例 1:

输入:words1 = ["leetcode","is","amazing","as","is"], words2 = ["amazing","leetcode","is"]
输出:2
解释:
- "leetcode" 在两个数组中都恰好出现一次,计入答案。
- "amazing" 在两个数组中都恰好出现一次,计入答案。
- "is" 在两个数组中都出现过,但在 words1 中出现了 2 次,不计入答案。
- "as" 在 words1 中出现了一次,但是在 words2 中没有出现过,不计入答案。
所以,有 2 个字符串在两个数组中都恰好出现了一次。

示例 2:

输入:words1 = ["b","bb","bbb"], words2 = ["a","aa","aaa"]
输出:0
解释:没有字符串在两个数组中都恰好出现一次。

示例 3:

输入:words1 = ["a","ab"], words2 = ["a","a","a","ab"]
输出:1
解释:唯一在两个数组中都出现一次的字符串是 "ab" 。

提示:

  • 1 <= words1.length, words2.length <= 1000
  • 1 <= words1[i].length, words2[j].length <= 30
  • words1[i] 和 words2[j] 都只包含小写英文字母。

分析:
我们先来看一下题意,有两个字符串数组,我们要得到一个 数目:**字符串 **在两个字符串数组中都出现,并且在各自的字符串数组中都只出现过一次
这道题的思路比较简单,就是分别将两个字符串数组的元素作为key存入map中,值为出现的次数,然后遍历某一个map,如果在自己的数组中出现的次数为1,并且在对方数组中出现过,并且在对方数组中也只出现过一次,那么,这个字符串计入 **数目 **中

题解:

class Solution {public int countWords(String[] words1, String[] words2) {Map<String, Integer> map1 = new HashMap<>();Map<String, Integer> map2 = new HashMap<>();int count = 0;for (int i = 0; i < words1.length; i++) {map1.put(words1[i], map1.getOrDefault(words1[i], 0) + 1);}for (int i = 0; i < words2.length; i++) {map2.put(words2[i], map2.getOrDefault(words2[i], 0) + 1);}for (String s : map2.keySet()) {if (map2.get(s) == 1 && map1.getOrDefault(s, 0) == 1) {count++;}}return count;}
}

收获:

  • 发现了吧,Map体系中的getOrDefault()函数非常适合这种场景:将一个数组元素作为key存入map中时,当数组元素并不唯一时,利用getOrDefault()可以将该值出现的次数存入以该值为key的map元素中。这个场景非常常用,一定要记住
  • get() 和 containsKey() 的关系,相当于get是有返回值的,containKey是没有返回值的查询

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

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

相关文章

【PlantUML】- 时序图

写在前面 本篇文章&#xff0c;我们来介绍一下PlantUML的时序图。这个相对类图来讲&#xff0c;比较简单&#xff0c;也不需要布局。读完文章&#xff0c;相信你就能实际操作了。 目录 写在前面一、基本概念二、具体步骤1.环境说明2.元素3.语法4.示例 三、参考资料写在后面系列…

作业-去重复统计(2)

扑克牌组合 题目描述 小明从一副扑克牌中&#xff08;没有大小王&#xff0c;J认为是数字11&#xff0c;Q是12&#xff0c;K是13&#xff0c;A是1&#xff09;抽出2张牌求和&#xff0c;请问能够组合出多少个不相等的数&#xff0c;按照由小到大输出这些数。 输入 第一行是一个…

软件测试|Python数据可视化神器——pyecharts教程(十)

使用pyecharts绘制漏斗图 简介 漏斗图&#xff08;Funnel Chart&#xff09;是一种用于可视化数据流程或转化率的图表类型。它通常由一系列阶段组成&#xff0c;每个阶段都有一个名称和一个值&#xff0c;表示在该阶段的转化量或数据流程的进展情况。漏斗图的名称来源于其外观…

Web自动化测试,一定得掌握的 8 个核心知识点

使用 cypress 进行端对端测试&#xff0c;和其他的一些框架有一个显著不同的地方&#xff0c;它使用 javascript 作为编程语言。传统主流的 selenium 框架是支持多语言的&#xff0c;大多数 QA 会的python 和 java 语言都可以编写 selenium 代码&#xff0c;遇到需要编写 js 代…

linux文件描述符管理

在实际的项目开发中&#xff0c;文件描述符是经常用到的并且在释放资源过程中也是很容易忽略的&#xff0c;使用之后不释放就会增加cpu负担&#xff0c;无异于内存泄漏&#xff1b;所以时刻掌握文件描述符的状态是非常重要的&#xff01;下面介绍文件描述符的管理方法。 1. 文…

好用的便签有哪些?windows便签工具在哪打开?

每当我8点准时上班&#xff0c;在等待电脑开机的过程&#xff0c;我都会习惯性地思考整理今天要晚上的任务&#xff0c;列出所要完成的待办事项。随着每一项任务的清晰呈现&#xff0c;我的心情也逐渐明朗起来。当然了&#xff0c;这个时候&#xff0c;我迫切需要一款好用的便签…

VS游戏打包教程

我用得天天酷跑小游戏做的例子 1:安装打包插件 2:在解决方案里新建一个项目 3:新建一个setup项目 4:界面如下(通过右键folder,可以创建folder目录和输出) 5:素材文件 6:素材放完了就项目输出 7:创建快捷方式 右键这个主输出选择第一个create shortcut 8:将这个快捷方式,拖到,…

算法通关村番外篇-LeetCode编程从0到1系列一

大家好我是苏麟 , 今天开始带来LeetCode编程从0到1系列 . 编程基础 0 到 1 , 50 题掌握基础编程能力 大纲 1768.交替合并字符串389. 找不同28. 找出字符串中第一个匹配项的下标242. 有效的字母异位词459. 重复的子字符串283. 移动零66. 加一1822. 数组元素积的符号1502. 判断能…

02二位数组算法

1.杨辉三角 算法思想&#xff1a; a[i][j]a[i-1][j]a[i-1][j-1];代码&#xff1a; #include<iostream> using namespace std; const int N 1e2 10; int a[N][N]; int main() {int n; cin >> n;a[1][1] a[2][1] a[2][2] 1;for (int i 3; i < n; i) {for…

【已解决】C语言如何使用宽字符输出中文

本博文源于笔者正在运行的程序想要在宽字符下运行中文wchar_t wstr[10]L"12凡人";想要正确输出它。 问题来源 想要正确输入宽字符下的中文 问题解决方案 #include<stdio.h> #include<locale.h> int main() {setlocale(LC_ALL, "zh-cn");wc…

Canopen学习笔记——sync同步报文增加数据域(同步计数器)

1.Canfestival同步报文sync的设置 在OD表中的配置如下&#xff1a; 如果0x1006索引的同步报文循环周期时间设置为0则禁用同步报文&#xff0c;这里要注意的就是&#xff0c;上面第一张图也提到了&#xff0c;时间单位是us。第二张图&#xff0c;我的0x1006就设置为0xF4240,也就…

Java面试之虚拟机

1、前言 本篇的面试题基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、什么是虚拟机&#xff1f; Java 虚拟机&#xff0c;是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件( .class )。 Java 被设计成允许应用程…

LeetCode讲解篇之90. 子集 II

文章目录 题目描述题解思路题解代码 题目描述 题解思路 初始化一个变量start表示当前从哪里开始遍历nums 搜索过程的数字组合加入结果集 从start开始遍历nums 如果当前元素和前一个元素相等&#xff0c;前一个元素没被使用&#xff0c;则触发剪枝去重操作&#xff0c;跳过当…

华为机试真题实战应用【算法代码篇】-字符串比较(附C++和JAVA代码实现)

目录 题目描述 思路解析 思路1 思路2 代码实现 Java 代码2

58.leetcode 最后一个单词的长度

一、题目 二、解答 1. 思路 分2种情况 第一种情况只有一个单词&#xff0c;不包含空格&#xff1a;这种情况直接返回单词本身的长度。第二种情况包含空格&#xff1a;先去掉首尾的空格&#xff0c;根据空格切割字符串生成一个字符串列表&#xff0c;返回倒数第一个索引位置字…

Java8之Stream API

计算集合数据 一、Sream的四种实例化方式 1、通过集合&#xff0c;集合.stream() 2、通过数组工具类Arrays&#xff0c;Arrays.stream() 3、通过Stream.of() 4、创建无限流,主要用于创造数据 生成10个随机数 Stream.generate(Math::random).limit(10).forEach(System.ou…

QT周五作业

题目&#xff1a;实现简单水果的价格重量计算 点击一次水果重量1 自动计算总价 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QListWidgetItem> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…

PostgreSQL与Java JDBC数据类型对照

序号数据库类型Java类型JDBC索引JDBC类型1varcharjava.lang.String12VARCHAR2charjava.lang.String1CHAR3cidrjava.lang.Object1111OTHER4inetjava.lang.Object1111OTHER5macaddrjava.lang.Object1111OTHER6textjava.lang.String12VARCHAR7int8java.lang.Long-5BIGINT8byteabyt…

openssl3.2 - 官方demo学习 - cms - cms_sign2.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_sign2.c概述笔记END openssl3.2 - 官方demo学习 - cms - cms_sign2.c 概述 用多个证书进行CMS消息联合签名 笔记 /*! * \file cms_sign2.c * \note openssl3.2 - 官方demo学习 - cms - cms_sign2.c 用多个证书进行CMS消息联…

js unshift方法的使用

JavaScript的unshift()方法是数组对象的方法之一&#xff0c;用于在数组的开头插入一个或多个元素&#xff0c;并返回新数组的长度。它接受一个或多个参数&#xff0c;每个参数都将插入到数组的开头。 以下是unshift()方法的基本语法&#xff1a; var newLength array.unshi…