【力扣·每日一题】2085.统计出现过一次的公共字符串(模拟 哈希表 优化 C++ Go)

news/2024/7/27 7:35:54/文章来源:https://blog.csdn.net/weixin_45675097/article/details/135543058

题目链接

题意

给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。
输入:words1 = [“leetcode”,“is”,“amazing”,“as”,“is”], words2 = [“amazing”,“leetcode”,“is”]
输出:2
解释:

  • “leetcode” 在两个数组中都恰好出现一次,计入答案。
  • “amazing” 在两个数组中都恰好出现一次,计入答案。
  • “is” 在两个数组中都出现过,但在 words1 中出现了 2 次,不计入答案。
  • “as” 在 words1 中出现了一次,但是在 words2 中没有出现过,不计入答案。
    所以,有 2 个字符串在两个数组中都恰好出现了一次。
    提示:

1 < = w o r d s 1. l e n g t h , w o r d s 2. l e n g t h < = 1000 1 <= words1.length, words2.length <= 1000 1<=words1.length,words2.length<=1000
1 < = w o r d s 1 [ i ] . l e n g t h , w o r d s 2 [ j ] . l e n g t h < = 30 1 <= words1[i].length, words2[j].length <= 30 1<=words1[i].length,words2[j].length<=30
w o r d s 1 [ i ] words1[i] words1[i] w o r d s 2 [ j ] words2[j] words2[j] 都只包含小写英文字母。

思路1

  • 用哈希表mp1来统计word1中每个字符串的出现次数
  • 用哈希表mp2来统计word2中每个字符串的出现次数
  • 遍历哈希表mp1,判断它在word1,word2中的出现次数是否都是1,如果都是1的话,记录答案
  • 时间复杂度为 O ( n + m ) O(n+m) O(n+m),空间复杂度为 O ( n + m ) O(n+m) O(n+m),其中 n n nword1里所有字符串的长度和, m m mword2里所有字符串的长度和

代码1

golang版本代码

在这里插入图片描述

func countWords(words1 []string, words2 []string) int {mp1 := make(map[string]int, len(words1))mp2 := make(map[string]int, len(words2))for _, word := range words1 {mp1[word]++}for _, word := range words2 {mp2[word]++}var ans = 0for k, v := range mp1 {if v != 1 {continue}if cnt, ok := mp2[k]; ok && cnt == 1 {ans++}}return ans
}

c++版本代码

在这里插入图片描述

class Solution {public:int countWords(vector<string>& words1, vector<string>& words2) {map<string,int>mp1,mp2;for(auto word:words1) {mp1[word]++;}for(auto word:words2) {mp2[word]++;}int ans = 0;for(auto it:mp1) {if (it.second == 1 && mp2[it.first] == 1) {ans++;}}return ans;}
};

思路2

  • 基于思路1的基础上,考虑能否只用一个哈希表完成题目
  • 先用哈希表mp来统计word1中每个字符串的出现次数
  • 遍历word2的字符串word,对mp[word]的情况进行讨论
    • mp[word]=1 说明wordword1里出现了一次,更新答案,且将mp[word]赋值为一个特殊的数字,这里赋值为-1
    • mp[word]=-1说明wordword2里已经出现了一次,当前是第二次,更新答案(这里是ans--,因为word已经不符合条件了),且将mp[word]赋值为正常的计数2
  • 看了下运行截图还是优化了下空间的

代码2

golang版本代码

在这里插入图片描述

func countWords(words1 []string, words2 []string) int {mp := make(map[string]int, len(words1))for _, word := range words1 {mp[word]++}var ans = 0for _, word := range words2 {switch mp[word] {case 1:ans++mp[word] = -1case -1:ans--mp[word] = 2}}return ans
}

c++版本代码

在这里插入图片描述

class Solution {public:int countWords(vector<string>& words1, vector<string>& words2) {map<string,int>mp;for(auto word:words1) {mp[word]++;}int ans = 0;for(auto word:words2) {if(mp[word]==1) {mp[word] = -1;ans ++;} else if(mp[word]==-1) {mp[word] = 2;ans --;}}return ans;}
};

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

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

相关文章

Java爬虫爬取图片壁纸

Java爬虫 以sougou图片为例&#xff1a;https://pic.sogou.com/ JDK17、SpringBoot3.2.X、hutool5.8.24实现Java爬虫&#xff0c;爬取页面图片 项目介绍 开发工具&#xff1a;IDEA2023.2.5 JDK&#xff1a;Java17 SpringBoot&#xff1a;3.2.x 通过 SpringBoot 快速构建开发环境…

Baumer工业相机堡盟工业相机如何使用OpenCV实现相机图像的显示(C#)

Baumer工业相机堡盟工业相机如何使用OpenCV实现相机图像的显示&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像转换为OpenCV的Mat图像的技术背景在NEOAPI SDK里使用OpenCV实现相机图像的显示联合OpenCV实现相机图像的显示测试演示图 工业相机通过使用OpenCV实现…

生产力与生产关系 —— 浅析爱泼斯坦事件 之 弱电控制强电原理

据网络文字与视频资料&#xff0c;爱泼斯坦事件是犹太精英阶层&#xff0c;为了掌控美国国家机器为犹太利益集团服务&#xff0c;而精心设下的一个局。本文先假设这个结论成立&#xff0c;并基于此展开讨论。 我们知道&#xff0c;弱电管理强电是电气工程中的一门专门学问&…

Pandas.DataFrame.groupby() 数据分组(数据透视、分类汇总) 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.1.2 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 Pandas稳定版更新及变动内容整合专题&#xff1a; Pandas稳定版更新及变动迭持续更新。 Pandas API参…

弟12章 网络编程

文章目录 网络协议概述 p164TCP协议与UDP协议的区别 p165TCP服务器端代码的编写 p166TCP服务器端流程 TCP客户端代码的编写 p167TCP客户端流程主机和客户端的通信流程 tcp多次通信服务器端代码 p168TCP多次通信客户端代码 p169UDP的一次双向通信 p170udp通信模型udp接收方代码u…

生活的再思考,写在开篇

近几年的就业行情很特别&#xff0c;特别是对中年人&#xff0c;早先网络上主流的声音是动不动总包百万&#xff0c;手握几个 Offer &#xff0c;纠结应该去哪里。现在的主流声音变成了&#xff0c;被毕业优化掉后几个月都没找到合适的工作&#xff0c;焦虑迷茫无所适从&#x…

第5章案例课:部署Tomcat及其负载均衡

这个实验需要3台虚拟机 192.168.9.40 9.31 9.32 去FTP 下载软件包 192.168.9.40 和 192.168.9.31 都要这里面的配置[rootnode1 ~]# mount /dev/cdrom /mnt/ //挂载[rootnode1 ~]# rpm -ivh /mnt/Packages/ftp-0.17-67.el7.x86_64.rpm //下载 FTP 软件包[roo…

发送HTTP POST请求并处理响应

发送HTTP POST请求并处理响应是Web开发中的常见任务。在Go语言中&#xff0c;可以使用net/http包来发送HTTP POST请求并处理响应。 以下是一个示例代码&#xff0c;演示了如何发送HTTP POST请求并处理响应&#xff1a; go复制代码 package main import ( "b…

模拟开关灯

1&#xff0e;  实验任务 如图所示&#xff0c;监视开关K1&#xff08;接在P3.0端口上&#xff09;&#xff0c;用发光二极管L1&#xff08;接在单片机P1.0端口上&#xff09;显示开关状态&#xff0c;如果开关合上&#xff0c;L1亮&#xff0c;开关打开&#xff0c;L1熄灭。…

51单片机_电子时钟电子万年历电子闹钟

实物演示效果&#xff1a; https://www.bilibili.com/video/BV1RN4y1Q7dK/?vd_source6ff7cd03af95cd504b60511ef9373a1d 二、液晶对比度的调节 液晶的内容要清晰显示&#xff0c;就要调节电位器来调节液晶的对比度&#xff0c;这个电位器位于液 晶的下面&#xff0c;可以用…

网络服务之DHCP

目录 一、DHCP是什么&#xff1f; 1、DHCP就是动态主机配置协议 2、DHCP的作用&#xff1a; 3、DHCP是应用层协议 二、DHCP的优点 三、DHCP的分配过程 1、自动分配&#xff1a;分配到一个ip地址后永久使用 2、手动配置&#xff1a;由DHCP服务器管理员专门指定ip地址&am…

NFS(Network File System 网络文件服务)

一&#xff0c;nfs 简介 1&#xff0c;nfs 性质 NFS&#xff08;Network File System 网络文件服务&#xff09; 文件系统&#xff08;软件&#xff09;文件的权限 NFS 是一种基于 TCP/IP 传输的网络文件系统协议 通过使用 NFS 协议&#xff0c;客户机可以像访问本地目录一样…

.Net 8.0 Web API Controllers 添加到 windows 服务

示例源码下载&#xff1a;https://download.csdn.net/download/hefeng_aspnet/88747022 创建 Windows 服务的方法之一是从工作线程服务模板开始。 但是&#xff0c;如果您希望能够让它托管 API 控制器&#xff08;也许是为了查看它正在运行的进程的状态&#xff09;&#xff0…

微软推出付费版Copilot

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 微软已经超越苹果&#xff0c;成了全球市值最高的公司&#xff0c;其他公司都因为AI大裁员&#xff0c;而微软正好相反&#xff0c;当然这个原因很简单&#xff1a;就是微软强制把AI全面接入到系统里来了。而Copilot…

在线的货币兑换平台源码下载

在线的货币兑换平台&#xff0c;可帮助全球各地的个人和企业将货币从一种货币兑换为另一种货币。该货币兑换平台是 Codecanyon 中最先进的脚本。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88728084

Android签名打包报错:Lint found fatal errors while assembling a release target.

1. Android签名打包报错&#xff1a;Lint found fatal errors while assembling a release target. 1.1. 问题 Android项目打debug 包的时候没问题&#xff0c;但是在打release迭代测试版本时候无法打包。Lint found fatal errors while assembling a release target. 1.2. …

【centos7系统】Redis-6.2.2版本集群搭建

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前redis最新版本已经是6.2.4&#xff0c;在集群搭建上和redis3.x、redis4.x区别很大。redis5以后&#xff0c;就不需要安装ruby了…

软件测试|pycharm关联GitHub的详细步骤

简介 GitHub 是全球最大的开源代码托管平台之一&#xff0c;而 PyCharm 是一款强大的 Python 集成开发环境。将两者结合使用&#xff0c;可以提高团队协作和代码管理的效率。本文将详细介绍如何在 PyCharm 中管理 GitHub 账号&#xff0c;包括如何设置 GitHub 账号、创建新仓库…

Python基础知识:整理15 列表的sort方法

1 sorted() 方法 之前我们学习过 sorted() 方法&#xff0c;可以对列表、元组、集合及字典进行排序 # 1.列表 ls [1, 10, 8, 4, 5] ls_new sorted(ls, reverseTrue) print(ls_new) …

JVM:双亲委派机制类加载器

JVM&#xff1a;双亲委派机制 1. 例子2. 类加载器总结3. 类加载过程4. 双亲委派模型的执行流程&#xff1a;5. 双亲委派模型的好处 1. 例子 Java运行时环境有一个java.lang包&#xff0c;里面有一个ClassLoader类 我们自定义一个String类在java.lang包下&#xff0c;下面的…