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

题目

如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :

  • 操作 1:交换任意两个 现有 字符。
    • 例如,abcde -> aecdb
  • 操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。
    • 例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )

你可以根据需要对任意一个字符串多次使用这两种操作。

给你两个字符串,word1 和 word2 。如果 word1  word2 接近 ,就返回 true ;否则,返回 false 

解题思路

  1. 两种操作可以无限次使用,所以需要对操作1和操作二进行进一步的扩充;
    1. 操作一:每个字符出现的次数相等即为接近;
    2. 操作二:字符出现的次数可以一一对应(字符本身不需要一一对应);
  2. 排除特殊情况即:字符串长度不相等;
  3. 逐个进行每个操作判断是否接近,统计各字符出现次数;
  4. 判断字符串之间是否存在未出现的字符;
  5. 比对字符的次数(与字符本身无关,建议先排序)。

代码展示

class Solution {public boolean closeStrings(String word1, String word2) {int m = word1.length();int n = word2.length();if(m != n){return false;}Map<Character,Integer> data1 = new HashMap<>();Map<Character,Integer> data2 = new HashMap<>();//统计每个字符出现的次数for (int i = 0; i < m; i++){char ch1 = word1.charAt(i);char ch2 = word2.charAt(i);data1.put(ch1, data1.getOrDefault(ch1, 0) + 1);data2.put(ch2, data2.getOrDefault(ch2, 0) + 1);}List<Integer> list1 = new ArrayList<>();List<Integer> list2 = new ArrayList<>();for (Character ch : data1.keySet()){Integer ch1 = data1.get(ch);Integer ch2 = data2.get(ch);//判断word2中是否不存在该字符,若不存在则返回falseif(ch2 == null){return false;} else if (!ch1.equals(ch2)){list1.add(ch1);list2.add(ch2);}}if(!list1.isEmpty()) {list1.sort(null);list2.sort(null);for (int i = 0; i < list1.size(); i++) {//包装类对象不能当作int直接划等号,否则会比对失败if (!Objects.equals(list1.get(i), list2.get(i))) {return false;}}}return true;}
}

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

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

相关文章

我的养生指南

作为一名程序员&#xff0c;一直坐在电脑前工作对身体造成很大的负担&#xff0c;引起颈椎病、近视、肥胖等问题&#xff0c;因此养生对于程序员来说非常重要。深有体会&#xff0c;不知各位大佬是否有体会 以下是我的养生指南&#xff1a; 做一些适量运动&#xff0c;保持身体…

XUbuntu22.04之OBS强大录屏工具(一百九十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Windows——安装WSL子系统

下载及安装 教程&#xff1a;https://zhuanlan.zhihu.com/p/35801201 报错解决&#xff1a; WSL安装无法打开&#xff08;WslRegisterDistribution failed with error: 0x800701bc…&#xff09; https://www.jianshu.com/p/e2df6d091f73 环境配置 WSL2 的开发环境配置 (基…

NX/UG二次开发—踩坑(边上点与面上点)

获取视图内遮挡面时&#xff0c;特别是与视图平行的面认为是可视面&#xff0c;但NX选择认为是非可视面&#xff0c;设计方案时只检查边上的点&#xff0c;发现一些面显示干涉遮挡&#xff0c;通过打印数据发现&#xff0c;以边上点为参考&#xff0c;获取面上点&#xff0c;会…

kubernetes(K8s)(Namespace、Pod、Deployment、Service资源的基本操作)-04

Namespace Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下&#xff0c;kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中&#xff0c;可能不想让两个Pod之间进行互相的…

leetcode 18. 四数之和(优质解法)

代码&#xff1a; class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> listsnew ArrayList<>();int lengthnums.length;Arrays.sort(nums);for(int i0;i<length-4;){for(int ji1;j<lengt…

第十五届蓝桥杯(Web 应用开发)模拟赛 2 期-大学组(详细分析解答)

目录 1.相不相等 1.1 题目要求 1.2 题目分析 1.3 源代码 2.三行情书 2.1 题目要求 2.2 题目分析 2.3 源代码 3.电影院在线订票 3.1 题目要求 3.2 题目分析 3.3 源代码 4.老虎坤&#xff08;不然违规发不出来&#xff09; 4.1 题目要求 4.2 题目分析 4.3 源代码 …

gdbus使用G_BUS_TYPE_SYSTEM做开机自启服务

我是用我自己在Glib学习&#xff08;28&#xff09; gdbus最简单的例子_gdbus 函数回调-CSDN博客中写的例程&#xff0c;运行服务端和客户端都没有问题&#xff0c;这里使用的bus type是G_BUS_TYPE_SESSION&#xff0c;会话模式。 当我把写好的程序配置成systemd自启动的服务时…

宝塔环境备份到西部数码FSS

1、登陆宝塔面板-软件商店-第三方应用&#xff0c; 搜索ftp&#xff1a;找到FTP存储空间&#xff0c;点击安装 2、在软件商城-已安装&#xff0c;找到ftp存储空间&#xff0c;点击进入选项设置. 3、按照下图填写fss相关参数.这些信息可以在fss详情中查看.目录路径如果没有请先在…

JConsole与jvisualvm都无法检测到本地的java程序的解决办法

直接在jar包启动时添加命令&#xff1a; 例如 start cmd /k "java -jar xxx.jar -XX:PerfBypassFileSystemCheck" .bat文件启动jar包命令后面添加-XX:PerfBypassFileSystemCheck 启动后&#xff0c;再打开JConsole或jvisualvm都会立马显示这个app

CSS伪类伪元素?:hover,::before,::after使用(举例)

文章目录 什么是CSS伪类&#xff1f;什么是伪元素&#xff1f;怎么用伪元素&#xff1f;可以做些什么&#xff1f;::before&#xff0c;在标签选择器之前添加内容&#xff0c;::after正好与之相反::before&#xff0c;在类选择器之前添加内容&#xff08;:制作一个悬浮提示窗 参…

Cesium中对Cesium.Cesium3DTileset模型进行偏移

Cesium中对Cesium.Cesium3DTileset模型进行偏移 3D Tiles 是将用于流式传输3D内容&#xff0c;包括建筑物&#xff0c;树木&#xff0c;点云&#xff0c;矢量数据。3DTiles 数据集以分块&#xff0c;分级渲染&#xff0c;将大数据量三维数据以分块&#xff0c;分层的形式组织起…

ROM和RAM概念

一、存储器特性 1&#xff09;易失性&#xff1a;掉电数据会丢失&#xff0c;通常指RAM&#xff1b; RAM分为SRAM、DRAM SRAM&#xff1a;静态RAM&#xff0c;只要上电数据就不会丢失&#xff1b; DRAM&#xff1a;动态RAM&#xff0c;需要每隔一段事件刷新数据&#xff0c;否…

宽量程双计数器测量方法

如要测量计数器信号的数字频率或周期&#xff0c;可使用双计数器方法测量宽量程信号。该方法适于待测量信号的范围较广且整个范围都需要较高测量精度的情况。关于使用宽量程测量方法提高测量精度的详细信息&#xff0c;见量化误差章节。也可使用该方法测量比计数器时基频率更高…

linux磁盘已满,查看哪个文件占用多

使用df -h查看磁盘空间占用情况 使用sudo du -s -h /* | sort -nr命令查看那个目录占用空间大 然后那个目录占用多 再通过sudo du -s -h /var/* | sort -nr 一层层排查&#xff0c;找到占用文件多的地方 如果通过以上方法没有找到问题所在&#xff0c;那么可以使用 lsof |…

python 实用函数——collections模块之Counter()

collections模块之Counter() Counter: 便捷快速计数&#xff08;支持所有存储结构&#xff09;,将元素计数&#xff0c;并返回一个字典&#xff0c;key为元素&#xff0c;value为该元素的数量&#xff0c;与count不同&#xff0c;count() 只会记录输入元素的数量 演示&#x…

UI自动化测试工具工作原理是怎样的?

随着软件开发的不断演进&#xff0c;保障软件质量成为了至关重要的一环。在这个过程中&#xff0c;UI自动化测试工具崭露头角&#xff0c;为开发团队提供了一种强有力的方式来确保应用程序的稳定性、功能性和兼容性。本文将深入探讨UI自动化测试工具的定义、工作原理以及其在提…

mybatis数据输入-零散的简单类型数据

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…

拼图游戏制作

2.创建用户界面 package domain; /** * ClassName: User * Author: Kox * Data: 2023/2/2 * Sketch: */ public class User { private String username; private String password; public User() { } public User(String username, String p…