哈希表、HashMap\Map-1657. 确定两个字符串是否接近

题目链接及描述

1657. 确定两个字符串是否接近 - 力扣(LeetCode)

题目分析

        今日看到这道题目,乍一看觉得非常熟悉,对于将一个字符串转换为另一个字符串的题目之前做过一些。分析题目,题目中所述就是两种操作:

  1. 将一个字符和另一个字符的位置交换。
  2. 对于两个个数不一样的字符,可以将字符A变为字符B,同时将字符B变为字符A。字符个数无所谓。

        以上所述两种变换可以用一句话概括,对于一个字符串中的任意两种类型的字符,无论字符个数是否相同,都可以将类型A对应的字符变为类型B对应的字符,同时对类型B所对应的字符转换为类型A所对应的字符。【类型A的所有字符必须和类型B的所有字符对换,不管个数是否相同】

        aacabb ----- 将a变为b,b变为a,字符对应的个数和位置保持不变-----> bbcbaa

        由于字符具有传递性,所以任意字符都可以变换,上述a和b替换之后,a和c,b和c也可以替换。

        基于上面分析,本题只要掌握以下两点就可以解决。

  1. word1中出现的字符必须在word2中出现(不讨论个数),word2中出现的字符必须在word1中出现=》word1和word2中所出现的字符必须相等,否则无论如何交换字符不可能创造新字符。
  2. word1中某个字符出现的次数 count 在word2中必须有对应的某个字符出现的次数也为 count。 

         能够分析出以上两点就可以构造map进行代码分别,map中的key为对应的字符ch,value为字符ch在字符串中出现的次数。

        重点在于第二点如何实现,我的思路是构造好map之后,获取value构造一个int类型的数组,随后对数组进行升序排序,之后依序比较排序后的两个int数组的每一位元素是否相等,如果不等则不满足第2点,直接返回false,遍历完没有返回则此时返回true,能够实现题目要求。

代码编写

class Solution {public boolean closeStrings(String word1, String word2) {if(word1.length() != word2.length()){return false;}Map<Character, Integer> map1 = new HashMap<>();Map<Character, Integer> map2 = new HashMap<>();for(char ch : word1.toCharArray()){map1.put(ch, map1.getOrDefault(ch, 0) + 1);}for(char ch : word2.toCharArray()){if(!map1.containsKey(ch)){return false;}map2.put(ch, map2.getOrDefault(ch, 0) + 1);}if(map1.size() != map2.size()){return false;}int[] arr1 = new int[map1.size()];int[] arr2 = new int[map2.size()];int idx = 0;for(int cnts : map1.values()){arr1[idx++] = cnts;}idx = 0;for(int cnts : map2.values()){arr2[idx++] = cnts;}Arrays.sort(arr1);Arrays.sort(arr2);for(int i = 0; i < arr1.length; i++){if(arr1[i] != arr2[i]){return false;}}return true;}
}

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

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

相关文章

嵌入式软件跳槽求指导?

嵌入式软件行业的跳槽确实需要一些特定的策略和技巧。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 因为这个…

列存在 OceanBase 数据库架构中的应用与演进

OceanBase 4.3 版本上线了列存功能&#xff0c;以满足实时分析的需求。 本文作为《特性解读&#xff1a;列存技术》的后续&#xff0c;将详细阐述列存技术在OceanBase数据库架构中的应用、发展历程&#xff0c;以及未来的趋势。 一、前言 1970 年&#xff0c;关系模型之父 Co…

LeakSearch:针对网络公开凭证的安全扫描与检测工具

关于LeakSearch 在红队演戏过程中&#xff0c;往往需要获取到针对目标域的访问权限。在这个过程中&#xff0c;很多红队人员会选择使用暴露在互联网上的代理服务器来实现目标域的访问&#xff0c;那么此时就需要在互联网上收集公开暴露的凭证信息。 对于蓝队来说&#xff0c;…

Playwright+Python+Pytest:基础方法二次封装简化及链式调用

引言 随着Web应用的日益复杂化&#xff0c;自动化测试成为了确保软件质量的关键环节。Playwright 是一个强大的自动化库&#xff0c;它支持在 Chromium、Firefox 和 WebKit 中运行自动化脚本。本文将介绍如何使用 Playwright 的 Python 同步 API 来简化点击和填充操作&#xf…

阿里云邮件推送配置教程:API配置的步骤?

阿里云邮件推送服务如何使用&#xff1f;如何配置邮件推送服务&#xff1f; 阿里云提供了强大的邮件推送服务&#xff0c;帮助企业高效地发送邮件通知、验证码、营销活动等。Aok将详细介绍阿里云邮件推送的配置教程&#xff0c;以及API配置的步骤&#xff0c;同时简要提及AokS…

[数据集][目标检测]盲道检测数据集VOC+YOLO格式2173张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2173 标注数量(xml文件个数)&#xff1a;2173 标注数量(txt文件个数)&#xff1a;2173 标注…

如何组织基于Sqlalchemy的项目

在使用 SQLAlchemy 构建项目时&#xff0c;可以遵循一些常用的组织结构和最佳实践&#xff0c;以确保项目清晰、易于维护。下面就是我在构建项目时遇到的一些问题&#xff0c;并做了详细的记录&#xff0c;为了方便大家学习少走一些弯路。 1、问题背景 在基于Sqlalchemy的项目…

IDEA的使用配置Maven(及selenium+webdriver的下载配置)

一. 下载maven 1. maven官网下载链接 2.​​安装第二行第一列的zip压缩包 ​​​​​​​​ 二. 配置环境变量 1.新建环境变量 2.在系统变量Path环境变量中添加%Maven_HOME%\bin 三.验证环境变量是否配置成功 winr >cmd>mvn -v 如果出现Maven的版本信息&#xff0…

Matlab解决矩阵微分方程建模(代码开源)

#用matlab解决施密特正交规范化矩阵之后&#xff0c;我又想到矩阵的微分方程计算量真的太大了&#xff0c;来回转化让我头大&#xff0c;于是我尝试了一下用matlab建立模型来解决这类问题。 代码部分如下&#xff1a;注解还挺清晰的&#xff1a; %%%解微分方程组%eg&#xff…

类的特殊成员函数

使用类的嵌套&#xff0c;并自定义析构函数 #include <iostream>using namespace std; class Per{ private:string name;int age;double hight;double weight; public:Per(string name,int age,double hight,double weight):name(name),age(age),hight(hight),weight(we…

图片如何修改尺寸?四种好用的修改图片尺寸方法!

图片如何修改尺寸&#xff1f;图片是一种常见的文件类型&#xff0c;它存在于什么生活的方方面面&#xff0c;虽然图片很好用&#xff0c;但是大家日常也要注意图片的尺寸&#xff0c;如果图片尺寸不对是会带来很多问题的&#xff0c;下面小编就举例说明几个问题&#xff0c;首…

Unity 自定义房间布局系统 设计与实现一个灵活的房间放置系统 ——物体占用的区域及放置点自动化

放置物体功能 效果&#xff1a; 功能&#xff1a; 自定义物体占用区域的大小一键调整占用区域调整旋转度数&#xff0c;分四个挡位&#xff1a; NoRotation&#xff1a;该物体不能调整旋转。MaximumAngle&#xff1a;每次转动90。NormalAngle&#xff1a;每次转动45&#xff…

根据租户id切换数据源

花了半天时间&#xff0c;使用spring-boot实现动态数据源&#xff0c;切换自如 在一个项目中使用多个数据源的情况很多&#xff0c;所以动态切换数据源是项目中标配的功能&#xff0c;当然网上有相关的依赖可以使用&#xff0c;比如动态数据源&#xff0c;其依赖为&#xff0c;…

探索营销系统业务架构的设计与应用

随着市场竞争的日益激烈和消费者需求的不断变化&#xff0c;营销系统作为企业营销管理的重要组成部分&#xff0c;扮演着至关重要的角色。本文将深入探讨营销系统业务架构的设计与应用&#xff0c;从客户关系管理、营销活动管理、数据分析和智能化服务等方面进行全面解析&#…

Innodb Buffer Pool缓存机制(四)预读与Mysql改进的LRU策略

一、什么是预读 InnoDB提供了预读(read ahead)。所谓预读&#xff0c;就是InnoDB认为执行当前的请求可能之后会读取某些页面&#xff0c;就预先把它们加载到Buffer Pool中。根据触发方式的不同&#xff0c;预读又可以细分为下边两种&#xff1a; 1.1 线性预读 InnoDB提供了一…

掘金AI商战宝典-高阶班:如何用AI制作视频(11节视频课)

课程下载&#xff1a;掘金AI商战宝典-高阶班&#xff1a;如何用AI制作视频(11节视频课)-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程目录&#xff1a; 1-第一讲用AI自动做视频(上)_1.mp4 2-第二讲用AI自动做视频(中)_1.mp4 3-第四讲A…

阿里云邮件推送服务配置教程:怎么做批发?

阿里云邮件推送的API配置步骤&#xff1f;配置教程有哪些步骤&#xff1f; 阿里云邮件推送服务凭借其高并发、稳定性强和安全性高等特点&#xff0c;成为众多企业的首选。Aok将详细介绍如何使用阿里云邮件推送服务进行批发配置&#xff0c;并简要提及AokSend的优势。 阿里云邮…

UE4_环境_材质函数

学习笔记&#xff0c;不喜勿喷&#xff0c;欢迎指正&#xff0c;侵权立删&#xff01; 1、建立材质函数Distance_Fun&#xff0c;勾选公开到库。 2、添加函数输入节点FunctionInput&#xff0c; 这个输入我们想作为混合材质属性BlendMaterialAttributes的alpha输入节点&#x…

手撸 串口交互命令行 及 AT应用层协议解析框架

在嵌入式系统开发中&#xff0c;命令行接口&#xff08;CLI&#xff09;和AT命令解析是常见的需求。CLI提供了方便的调试接口&#xff0c;而AT命令则常用于模块间的通信控制。本文将介绍如何手动实现一个串口交互的命令行及AT应用层协议解析框架&#xff0c;适用于FreeRTOS系统…

06Docker-Compose和微服务部署

Docker-Compose 概述 Docker Compose通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器&#xff0c;帮助我们实现多个相互关联的Docker容器的快速部署 一般一个docker-compose.yml对应完整的项目,项目中的服务和中间件对应不同的容器 Compose文件实质就…