【每日一题】确定两个字符串是否接近

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路与实现
    • 方法一:计数
  • 其他语言
    • python3
  • 写在最后

Tag

【计数】【字符串】


题目来源

1657. 确定两个字符串是否接近


题目解读

你可以进行以下两种操作:

  • 操作 1:交换任意两个位置的字符;
  • 操作 2:将字符串中出现的某一个字符转换为另一个字符串中的字符,比如 aacabb -> bbcbaa,将所有的 a 转化为 b,所有的 b 转化为 a

如果两个字符串使用以上操作可以从将一个字符串转化成另一个字符串,则认为两个字符串 接近

现在有两个字符串 word1word2,问这两个字符串是否接近,如是返回 true,否则返回 false


解题思路与实现

方法一:计数

思路

首先需要明确,两种操作都不会产生新的字符,因此如果某个字符串中出现了另一个字符串没有出现的字符,那么这两个字符串一定不会 接近

其次,无论是进行字符交换的操作 1 的还是进行字符转换操作 2,都不应改变原来字符出现的次数数组(排序后应相等),比如字符串 "aacabb" 原来的字符次数数组为 [3, 1, 2] 经过任意次的操作之后,形成的与原字符串 接近 的一种字符串为 "bbcbaa",对应的字符数组为 [3, 1, 2]

同时满足以上两个条件的字符串才是 接近 的。

于是,需要统计两个字符串中字符出现的数量。因为字符串仅包含小写英文字符,所以可以使用长度为 26 的数组来统计字符出现的数量,字符 a 出现的数量为数组下标 'a' - 'a' = 0 对应的数值,字符 b 出现的数量为数组下标 'b' - 'a' = 1 对应的数值,…,字符 z 出现的数量为数组下标 'z' - 'a' = 25 对应的数值。

具体实现

判断是否接近过程为:

  • 分别遍历字符串 word1word2,更新统计字符串中字符出现数量的数组 cnt1cnt2
  • 如果 cnt1cnt2 中某一个字符出现次数为 0,而另一个数组中对应字符出现次数不为 0,则返回 false
  • 如果 cnt1cnt2 排序后不相等,返回 false
  • 如果以上代码在运行中没有返回 false,最后直接返回 true

在统计两个字符串中出现的字符是否一致还可以使用集合来判断(只提供思路,具体实现请读者自行完成),集合我们可以使用 STL 中的 set,也可以使用二进制数利用位运算来模拟集合。这里对用二进制数来模拟集合简单说一说,字符串 "aacabb" 的字符集合使用二进制表示为 111,具体实现过程请参考 位运算基础与应用。

实现代码

class Solution {
public:bool closeStrings(string word1, string word2) {vector<int> cnt1(26), cnt2(26);for (char c : word1) {++cnt1[c- 'a'];}for (char c : word2) {++cnt2[c - 'a'];}for (int i = 0; i < 26; ++i) {if (cnt1[i] > 0 && cnt2[i] == 0 || cnt2[i] > 0 && cnt1[i] == 0) {return false;}} sort(cnt1.begin(), cnt1.end());sort(cnt2.begin(), cnt2.end());return cnt1 == cnt2;}
};

复杂度分析

时间复杂度: O ( m a x n 1 , n 2 + C l o g C ) O(max{n_1, n_2} + ClogC) O(maxn1,n2+ClogC) n 1 n_1 n1 n 2 n_2 n2 分别为字符串 word1word2 的长度, C = 26 C = 26 C=26 是字符集的大小。

空间复杂度: O ( C ) O(C) O(C)


其他语言

python3

class Solution:def closeStrings(self, word1: str, word2: str) -> bool:return Counter(word1).keys() == Counter(word2).keys() and sorted(Counter(word1).values()) == sorted(Counter(word2).values())

下面对代码中的关键部分进行解释:

  • Counter(word1)Counter(word2):这两个语句使用 Python 的 collections 模块中的 Counter 类,用于统计字符串中每个字符的出现次数,返回一个字典,其中键是字符,值是该字符在字符串中出现的次数;
  • Counter(word1).keys():获取字符串 word1 中所有字符的集合,即字符的唯一集合;
  • sorted(Counter(word1).values()):获取字符串 word1 中字符出现次数的有序列表。

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

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

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

相关文章

浪涌保护器参数指南:浪涌保护器行业选型方案

浪涌保护器&#xff08;SPD&#xff09;是一种用于限制瞬态过电压和泄放浪涌电流的器件&#xff0c;可有效降低电子设备在雷击、电源故障等情况下受到的损害。其主要作用是当系统发生浪涌时&#xff0c;将过电压、过电流泄放到大地&#xff0c;从而保护设备和人身安全。然而浪涌…

什么是Amazon Lambda(无服务器计算服务)

Lambda 在高可用性计算基础设施上运行代码&#xff0c;用于执行计算资源的所有管理工作。这包括服务器和操作系统维护、容量调配和弹性伸缩、代码和安全补丁部署以及代码监控和日志记录。您只需要提供代码。 最近亚马逊云服务提供了超多免费的云服务&#xff0c;快来领取免费套…

【设计模式】单例模式代码设计

目录 单例模式简介饿汉单例模式懒汉单例模式线程安全的懒汉单例模式 橙色 详细可参考该篇文章&#xff1a;C设计模式 - 单例模式 单例模式简介 单例模式指的是&#xff0c;无论怎么获取&#xff0c;永远只能得到该类类型的唯一一个实例对象&#xff0c;那么设计一个单例就必须…

聊聊部署在不同K8S集群上的服务如何利用nginx-ingress进行灰度发布

前言 之前有篇文章聊聊如何利用springcloud gateway实现简易版灰度路由,里面的主人公又有一个需求&#xff0c;他们有个服务是没经过网关的&#xff0c;而是直接通过nginx-ingress暴露出去&#xff0c;现在这个服务也想做灰度&#xff0c;他知道在同个集群如何利用nginx-ingre…

Git 分支合并时 Merge, Rebase, Squash 的使用场景

前言 Git 的分支设计大大提升了并行开发的能力&#xff0c;但相应的&#xff0c;也就要解决如何进行分支合并。毕竟分久必合&#xff0c;最终还是要把大家的工作合并起来&#xff0c;进行统一发布的。在合并时&#xff0c;通常有三种操作&#xff1a; Merge commitsRebaseSqu…

Vue学习计划--Vue2(二)Vue代理方式

Vue data中的两种方式 对象式 data:{}函数式 data(){return {} }示例&#xff1a; <body><div id"app">{{ name }} {{ age}} {{$options}}<input type"text" v-model"value"></div><script>let vm new Vue({el: …

Linux操作系统之wget下载软件并安装

文章目录 前言一、apt下载二、wget下载1、新建目录存放文件2、根据下载地址使用wget下载安装包3、解压包4、命令指定目录&#xff0c;让其生效如有启发&#xff0c;可点赞收藏哟~ 前言 一般安装可以直接使用apt命令&#xff0c;不过安转的不是最新版本的&#xff0c;且没法指定…

驱动开发--内核添加新功能

Ubuntu下这个文件为开发板ls命令的结果 内核的内容&#xff1a; mm&#xff1a;内存管理 fs&#xff1a;文件系统 net&#xff1a;网络协议栈 drivers&#xff1a;驱动设备 arch与init&#xff1a;跟启动相关 kernel与ipc&#xff1a;任务&#xff0c;进程相关 向内核增…

Depop自养号下单教程,测评环境、IP与买家资料的关键

Depop是一家总部位于英国伦敦的在线时尚市场和社交媒体平台。该平台于2011年由Simon Beckerman创立&#xff0c;旨在提供一个结合了时尚、创意和社交互动元素的独特购物体验。Depop已经发展成为一个备受欢迎的时尚社交应用&#xff0c;吸引了全球范围内的卖家和购物者。提供了一…

一文读懂3D开发工具HOOPS SDK

前言 Tech Soft 3D是全球领先的3D领域开发工具提供商&#xff0c;可帮助软件团队交付成功的应用程序。Tech Soft 3D成立于1996年&#xff0c;该公司的工具包产品为全球数亿台计算机上运行的近500个独特应用程序提供支持&#xff0c;已经助力SolidWorks、AutoDesk、GrabCAD、CD…

kafka 3.x 学习笔记

kafka 3.x 学习笔记 在 kafka 2.8.0 版本之前&#xff0c;安装使用 kafka 需要配套安装 zookeeper&#xff0c;但在 2.8.0 版本之后&#xff0c;不再需要安装 zookeeper&#xff0c;本次学习笔记采用的 kafka 版本为 3.0.0。 文章目录 kafka 3.x 学习笔记一、kafka 定义1 什么是…

任务管理器快捷键分享!这些知识很有用!

“我刚学习使用电脑没多久&#xff0c;想问问大家任务管理器这个功能有什么用处呀&#xff1f;在使用任务管理器时有什么快捷键能快速进入吗&#xff1f;感谢解答&#xff01;” 在日常使用电脑的过程中&#xff0c;我们经常需要打开任务管理器来进行一些操作。而掌握任务管理器…

大数据SpringBoot项目|基于SpringBoot+MyBatis框架健身房管理系统的设计与实现

大数据SpringBoot项目|基于SpringBootMyBatis框架健身房管理系统的设计与实现 摘 要:本文基于Spring Boot和MyBatis框架&#xff0c;设计并实现了一款综合功能强大的健身房管理系统。该系统涵盖了会员卡查询、会员管理、员工管理、器材管理以及课程管理等核心功能&#xff0c;…

机器视觉中的图像增强与对比度调整技术

在机器视觉中&#xff0c;图像增强与对比度调整技术是常用的方法&#xff0c;旨在改善图像的质量和视觉效果&#xff0c;或将图像转换成更适合人眼观察或机器分析识别的形式。 图像增强技术可以针对给定图像的应用场合&#xff0c;有目的地强调图像的整体或局部特性&#xff0…

移动端APP自动化测试框架-UiAutomator2基础

很早以前&#xff0c;我用uiautomatorjava实践过Android APP自动化测试&#xff0c;不过今天要提的不是uiautomator&#xff0c;而是uiautomator2。听起来uiautomator2像是uiautomator的升级版&#xff0c;但是这两款框架仅仅是名字上比较相似&#xff0c;实际上没有任何关联。…

硬盘分区丢失?这样轻松恢复!

​“在我安装操作系统的过程中&#xff0c;我先把C盘&#xff08;100G&#xff09;进行了格式化&#xff0c;而我的D盘大小为297G&#xff0c;然而在Win PE中&#xff0c;所显示的仅是247G&#xff08;CD盘总容量&#xff09;&#xff0c;这247G是空无一物的。让我感到困惑的是…

02、pytest环境准备

工具准备 python官网下载&#xff1a;https://www.python.org/pycharm官网下载&#xff1a;https://www.jetbrains.com.cn/en-us/pycharm/pytest官方文档&#xff1a;https://docs.pytest.org/en/7.4.x/python-office官网文档&#xff1a;http://www.python-office.com/ 参考…

《消息队列MyMQ》——参考RabbitMQ实现

目录 一、什么是消息队列&#xff1f; 二、需求分析 1&#xff09;核心概念 2&#xff09;核心API 3&#xff09;交换机类型 4&#xff09;持久化 5&#xff09;网络通信 ​编辑 6&#xff09;消息应答 三、 模块划分 四、创建核心类 1.ExChange 2.MSGQueue 3.Bind…

NSSCTF 文件上传漏洞题目

目录 [SWPUCTF 2021 新生赛]easyupload1.0 [SWPUCTF 2021 新生赛]easyupload2.0 [SWPUCTF 2021 新生赛]easyupload3.0 [SWPUCTF 2021 新生赛]easyupload1.0 这是一个文件上传漏洞的题目 我们的思路是上传一句话木马&#xff0c;用工具进行连接 先编写一句话木马 将文件后缀…

【深度学习】Stable Diffusion中的Hires. fix是什么?Hires. fix原理

文章目录 **Hires. fix****Extra noise**Upscalers Hires. fix https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#hires-fix 提供了一个方便的选项&#xff0c;可以部分地以较低分辨率呈现图像&#xff0c;然后将其放大&#xff0c;最后在高分辨率下添…