【LeetCode 75】第二十二题(1657)确定两个字符串是否接近

news2024/11/27 15:34:12

目录

题目:

示例:

分析:

代码+运行结果:


题目:

示例:

分析:

给我们两种操作,问我们可不可以通过两种操作将word1转变成word2.

第一种操作是交换两个现有字符的位置.

那么这就意味着,只要word1和word2有相同的字符并且相同字符的数量一致,那么word1就能通过交换位置来转变成word2.

我们再来看看第二种操作:将两种字符交换,例如把所有的'a'变成'b',把所有的'b'变成'a',并且前提是字符串中本身就含有'a'和'b'两种字符.

首先我们可以先做一个判断,如果两个字符串的长度不一致时,那么无论怎么操作,word1都变不成word2,因此长度不同时可以直接返回 false.(参考示例2)

接着,我们可以通过map(本题不需要排序键值,因此可以使用unordered_map来提升查询速度,但是map比较短比较好写,因此我下面都使用的是map).在遍历两个字符串的时候通过map来分别统计两个字符串的字符以及出现的次数.

我们再遍历存放word2字符情况的map,用另一个map来统计word2的字符出现次数的次数(不理解的话可以参考我上一题的题解,思路基本一致),然后在遍历的同时再检测一下有没有word2有,但是word1中没有的字符,如果发现这有,那么也可以直接返回false,因为两种操作都无法凭空创造出新的字符.

接下来我们在遍历存放word1字符情况的map,在遍历的同时,也寻找有没有word1有但是word2没有的字符,找到则返回false.

这样我们就可以保证两边字符串拥有的字符种类是一样的,接下来我们需要判断相同字符种类的字符数量是否一致.

不过,由于我们有第二种操作,因此每个字符种类的数目其实是不重要的,因为我们可以通过交换字符种类的数目来达到我们需要的特定的字符种类数目,因此在保证了两边字符种类一致的情况下,只需要再保证他们(不分字符种类)的字符种类数目一致即可.例如在字符种类一致的情况下,word1有两个出现次数为2的字符和三个出现次数为1的字符,word2也有两个出现次数为2的字符和三个出现次数为1的字符,那么我们不管它们具体拥有的是什么字符,只要出现次数一致的字符数量一致,即可通过上面两种操作转变成一样的字符串.

可以参考下面的动图以及代码:

代码+运行结果:

class Solution {
public:
    bool closeStrings(string word1, string word2) {
        if(word1.size()!=word2.size()) return false;
        unordered_map<char,int>m1,m2;   //记录字符的出现次数
        unordered_map<int,int>m22;      //记录word2出现次数的次数
        for(int i=0;i<word1.size();i++){    //如果两个字符串长度不一样,那么直接返回false了,因此两个字符串的长度一致,可以共用一个下标
            m1[word1[i]]++;m2[word2[i]]++;
        }
        for(const pair<char,int>&p:m2){
            if(m1.find(p.first)==m1.end()) return false;    //如果word2中有word1中没有的字符,那么无论怎么操作都无法使其相等,直接返回false.
            m22[p.second]++;    //统计word2字符出现次数的次数
        }
        for(const pair<char,int>&p:m1){
            if(m2.find(p.first)==m2.end() ||m22.find(p.second)==m22.end()||m22[p.second]<=0) return false;
            m22[p.second]--;
        }
        return true;
    }
};

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

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

相关文章

Shiro是什么?为什么要用Shiro?

前言 本文小新为大家带来 Shiro入门概述 相关知识&#xff0c;具体内容包括Shiro是什么&#xff0c;为什么要用 Shiro&#xff0c;Shiro与Spring Security 的对比&#xff0c;Shiro的基本功能&#xff08;包括&#xff1a;基本功能框架&#xff0c;功能简介&#xff09;&#x…

org.springframework.beans.factory.UnsatisfiedDependencyException:

今天碰到了一个数据库表中有2个主键&#xff0c;结果利用mp生成的po类&#xff0c;出现了一系列问题&#xff0c;报了这个错误&#xff0c;一看是这个实体类自带了2个filedId注解&#xff0c;运行springboot能不报错吗&#xff1f;报错信息挺有意思的&#xff0c;所以写了这篇博…

服务器时钟同步

服务器时钟同步 文章目录 服务器时钟同步背景windows时钟同步Linux机器上的时钟同步Centos时钟同步Ubuntu系统时钟同步 查看是否同步的命令 背景 运维&#xff0c;XXX服务器慢了2秒&#xff0c;导致XXX业务没有正常执行&#xff0c;请立即排查为啥会有时钟不同步的问题。 首先…

无涯教程-Perl - continue 语句函数

可以在 while 和 foreach 循环中使用continue语句。 continue - 语法 带有 while 循环的 continue 语句的语法如下- while(condition) {statement(s); } continue {statement(s); } 具有 foreach 循环的 continue 语句的语法如下- foreach $a (listA) {statement(s); } co…

React Native从文本内容尾部截取显示省略号

<Textstyle{styles.mMeNickname}ellipsizeMode"tail"numberOfLines{1}>{userInfo.nickname}</Text> 参考链接&#xff1a; https://www.reactnative.cn/docs/text#ellipsizemode https://chat.xutongbao.top/

C++学习——认识什么是STL以及string类的使用

目录 一&#xff1a;认识STL 1.什么是STL 2.STL当中的各种功能 3.STL的重要性 二&#xff1a;认识string类 1.什么是string 2.string类相关的使用方法 Tips1 &#xff1a;constructor Tips2&#xff1a;destructor Tips3&#xff1a;iterator Tips4&#xff1a;capacity ​编辑…

数学建模学习(9):模拟退火算法

模拟退火算法(Simulated Annealing, SA)的思想借 鉴于固体的退火原理&#xff0c;当固体的温度很高的时候&#xff0c;内能比 较大&#xff0c;固体的内部粒子处于快速无序运动&#xff0c;当温度慢慢降 低的过程中&#xff0c;固体的内能减小&#xff0c;粒子的慢慢趋于有序&a…

SQL 相关子查询 和 不相关子查询、Exists 、Not Exists

不相关子查询 子查询的查询条件不依赖于父查询&#xff0c;称不相关子查询。子查询可以单独运行的 select stu_id,sex,age from student t where sex(select sexfrom studentwhere stu_id10023 )相关子查询 关联子查询 子查询的查询条件依赖于父查询&#xff0c;称为 相关子…

【Hystrix技术指南】(6)请求合并机制原理分析

[每日一句] 也许你度过了很糟糕的一天&#xff0c;但这并不代表你会因此度过糟糕的一生。 [背景介绍] 分布式系统的规模和复杂度不断增加&#xff0c;随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中&#xff0c;【熔断、隔离、降级、限流】是经常被使…

跨境商城系统源码的优势,助力企业海外扩张

跨境电商发展背景与趋势 随着全球化的推进和互联网技术的快速发展&#xff0c;跨境电商已成为企业海外拓展的重要途径。然而&#xff0c;跨境电商面临着诸多挑战&#xff0c;如复杂的海外市场、文化差异、海关监管等。为了解决这些问题&#xff0c;企业可以借助跨境商城系统源码…

连接SAP rfc一直报错如何解决?

问题如下&#xff1a; 代码&#xff1a; static String ABAP_AS_POOLED "ABAP_AS_WITH_POOL";private static Logger log;static {Properties connectProperties new Properties();connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "IP&q…

vue table动态合并, 自定义合并,参照合并,组合合并

<template><div><el-table:data"tableData":span-method"objectSpanMethod"border:header-cell-style"{ textAlign: center }"><el-table-column prop"area" label"区域" align"center">…

分班问题难?分班查询系统为你解决分班难题

老师们在教学工作中&#xff0c;特别是每个新学年开始&#xff0c;都会面临一个重要的任务——分班。除了分班名单的确定&#xff0c;分班查询也同样困扰老师们&#xff01;在分班过程中面临的难题&#xff0c;最关键的一点是在完成分班名单确定后&#xff0c;分班查询的通知显…

Win7之MS12-020死亡蓝屏

一&#xff0c;何为死亡蓝屏 1&#xff0c;简介 死亡蓝屏利用RDP协议&#xff0c;基于3389远程桌面端口对目标主机进行攻击&#xff0c;使目标机系统瘫痪导致蓝屏&#xff0c;严重影响着计算机的正常使用。 2&#xff0c;条件 1>目标操作系统未开启防火墙和杀毒软件等 2&g…

STM32 LoRa源码解读

目录结构&#xff1a; SX1278 |-- include | |-- fifo.h | |-- lora.h | |-- platform.h | |-- radio.h | |-- spi.h | |-- sx1276.h | |-- sx1276Fsk.h | |-- sx1276FskMisc.h | |-- sx1276Hal.h | |-- sx1276LoRa.h | -- sx1276LoRaMisc.h – src |-- fifo.c |-- lora.c |-- …

Neo4j笔记-数据迁移(导出/导入)

这里先说明以下几点&#xff1a; Neo4j在4.0下版本默认的库名是&#xff1a;graph.db Neo4j在4.0上版本默认的库名是&#xff1a;neo4j.db 不管是Neo4j&#xff0c;还是Neo4j Desktop&#xff0c;都会在bin目录下有neo4j、neo4j-admin软件。在conf目录下&#xff0c;有neo4j.…

mfc140u.dll文件下载安装的方法,修复缺失的mfc140u.dll

关于mfc140u.dll缺失的情况&#xff0c;其实可以说是非常的常见&#xff0c;这个错误可能会导致某些程序无法正常的工作或者是启动&#xff0c;所以我就要想办法去解决它&#xff0c;而解决它的方法就是下载一个新的mfc140u.dll文件&#xff0c;今天我们就来聊聊mfc140u.dll文件…

Java中有哪些可以用于日期和时间的API?

从Java 8开始&#xff0c;java.time包提供了新的日期和时间API&#xff0c;新增的API严格区分了时刻、本地日期、本地时间&#xff0c;并且&#xff0c;对日期和时间进行运算更加方便。主要涉及的类型有以下几类&#xff1a; LocalDate&#xff1a;不包含具体时间的日期。 Lo…

gRPC中interceptor拦截器的总结和实践

一、使用场景 gRPC中的interceptor拦截器分为客户端拦截器和服务端拦截器&#xff0c;分别是在客户端和服务端的请求被发送出去之前进行处理的逻辑。常见的使用场景有&#xff1a;&#xff08;1&#xff09;请求日志记录及监控&#xff1b;&#xff08;2&#xff09;添加请求头…

C++初阶语法——引用,从此和指针说byebye

前言&#xff1a;相信学过C语言的同学肯定被指针深深折磨过&#xff0c;从一级指针到二级指针&#xff0c;数组指针&#xff0c;函数指针等等&#xff0c;可谓是谈针色变。而在C中&#xff0c;使用引用代替了指针的使用&#xff0c;大大降低了我们学习的难度。 引用 一.什么是…