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

文章目录

  • 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.hqwc.cn/news/247255.html

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

相关文章

【android开发-05】android中activity的启动模式介绍

1&#xff0c;活动的启动模式 在 Android 中&#xff0c;Activity 的启动模式主要有以下四种&#xff1a; 默认启动模式&#xff08;Normal&#xff09;&#xff1a;这是默认的启动模式&#xff0c;基本上就是标准的启动模式。当一个 Activity 启动后&#xff0c;它将会被压入…

Rust 语言:认识 Rust

本心、输入输出、结果 文章目录 Rust 语言&#xff1a;认识 Rust前言Rust的特点Rust LOGO Rust 在IT行业的应用前景Rust 是一门系统级编程语言相关链接花有重开日&#xff0c;人无再少年实践是检验真理的唯一标准 Rust 语言&#xff1a;认识 Rust 编辑&#xff1a;简简单单 Onl…

每日3道PWN(第一天)

环境准备 我现在用的是kali 现阶段工具&#xff1a;checkesc、IDA、比较完善的python环境 下载工具的话&#xff0c;我这里不提供了 buuctf——test_your_nc1 参考wp&#xff1a; BUUCTF PWN-----第1题:test_your_nc_buuctf test_your_nc-CSDN博客 查看的资料&#xff1a;…

关于使用百度开发者平台处理语音朗读问题排查

错误信息&#xff1a;"convert_offline": false, "err_detail": "16: Open api characters limit reach 需要领取完 识别和合成都要有

Win7 旗舰版打开Rustdesk软件提示无法启动程序 ,计算机中丢失api-ms-win-shcore-scaling-|1-1-1.dll

环境: Win7 旗舰版 64位 Rustdesk1.19自编译客户端 问题描述: Win7 旗舰版打开Rustdesk软件提示无法启动程序 ,计算机中丢失api-ms-win-shcore-scaling-|1-1-1.dll "api-ms-win-shcore-scaling-|1-1-1.dll" 是一个系统动态链接库文件,它是Windows操作系统的一…

如何使用OpenCV转换图像并创建视频,实现Ken Burns特效

一、Ken Burns特效 当使用OpenCV时,最常使用的是图像,但是我们也可以多个图像创建动画,通过引入时间轴更容易可视化。 Ken Burns特效这是一种以电影制片人肯伯恩斯 (Ken Burns) 命名的平移和缩放技术,Ken Burns 效果不是在屏幕上显示大型静态照片,而是裁剪细节,然后平移图…

蓝桥杯物联网竞赛_STM32L071_10_温度传感器扩展模块

原理图&#xff1a; 温度传感器原理图&#xff1a; 其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量 再利用公式将模拟量转换成相应温度即可 实验板接口原理图&#xff1a; 模拟量转相应温度公式&#xff1a; CubMx配置&#xff1a; Keil配置&…

com.mongodb.MongoSocketOpenException: Exception opening socket

估计mongodb数据库没开启&#xff0c;或者链接错误了&#xff0c;谁又改了&#xff0c;唉 2023-11-29 16:19:45.818 INFO 39552 --- [127.0.0.1:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server 127.0.0.1:27017…

Python实现交易策略评价指标-夏普比率

1.夏普比率的定义 在投资的过程中&#xff0c;仅关注策略的收益率是不够的&#xff0c;同时还需要关注承受的风险&#xff0c;也就是收益风险比。 夏普比率正是这样一个指标&#xff0c;它表示承担单位的风险会产生多少超额收益。用数学公式描述就是&#xff1a; S h a r p R…

CUDA简介——Grid和Block内Thread索引

1. 引言 前序博客&#xff1a; CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化 Thread Index&#xff1a; 每个Thread都有其thread index。 在Kernel中&#xff0c;可通过内置的threadIdx变量来获取其thread index。threadIdx为三维的&#xff0c;有相…

PMP备考必看|浅谈PMP证书的价值,PMP考试详细全流程

作为已经在项目管理领域摸爬滚打五年的资深项目经理&#xff0c;我可以诚实的告诉大家&#xff0c;在项目管理领域拥有丰富项目管理经验的人都知道&#xff0c;很多公司在发布招聘信息时都会要求申请者持有PMP证书&#xff0c;这些证书在项目经理岗位的要求中经常出现。 在实际…

【接口测试】POST请求提交数据的三种方式及Postman实现

1. 什么是POST请求&#xff1f; POST请求是HTPP协议中一种常用的请求方法&#xff0c;它的使用场景是向客户端向服务器提交数据&#xff0c;比如登录、注册、添加等场景。另一种常用的请求方法是GET&#xff0c;它的使用场景是向服务器获取数据。 2. POST请求提交数据的常见编…