图解LeetCode——854. 相似度为 K 的字符串(难度:困难)

news/2024/5/19 5:41:26/文章来源:https://blog.csdn.net/qq_26470817/article/details/126966452

一、题目

对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次,能够使结果字符串等于 s2 ,则认为字符串 s1 和 s2 的 相似度为 k 。

给你两个字母异位词 s1 和 s2 ,返回 s1 和 s2 的相似度 k 的最小值。

二、示例

2.1> 示例 1:

【输入】s1 = "ab", s2 = "ba"
【输出】1

2.2> 示例 2:

【输入】s1 = "abc", s2 = "bca"
【输出】2

提示:

  • 1 <= s1.length <= 20
  • s2.length == s1.length
  • s1 和 s2  只包含集合 {'a', 'b', 'c', 'd', 'e', 'f'} 中的小写字母
  • s2 是 s1 的一个字母异位词

三、解题思路

根据题目描述,需要寻找最小相似度,那么这道题我们可以采用回溯算法来进行计算。每次交换都会开辟一条新的“遍历路线”,那么每当我们走完一条路线之后,就需要通过回溯来走其他路线,最终根据计算每条路线的交换次数,返回最小值即可。下面我们以s1=“bccaba”,s2=“abacba”为例,展示一条路线的交换遍历过程,如下图所示:

通过上面的图例,我们了解到了一条路线的计算交换方式,但是,由于我们会针对每一步都会执行回溯操作(如果满足回溯条件的话),那么就会有N条路线。还是以上面的例子,如下列出了可能

路线很多,但是我们也没有必要全都执行完每条路线的遍历操作。比如,当我们遍历一条路线进行交换操作的时候,发现已经超过了其他路线的最小交换次数,那么这条路线我们就没有必要在继续走下去了。具体的逻辑处理,请参照如下的代码实现。

四、代码实现

class Solution {int result = Integer.MAX_VALUE;public int kSimilarity(String s1, String s2) {return execute(s1.toCharArray(), s2.toCharArray(), 0, 0);}public int execute(char[] sc1, char[] sc2, int start, int current) {if (current >= result) return result; // 如果交换次数已经超过"目前最小交换次数result",终止递归if (start == sc1.length - 1) return result = Math.min(current, result);for (int i = start; i < sc1.length; i++) {for (int j = i + 1; j < sc2.length; j++) {if (sc2[j] == sc1[i] && sc2[j] != sc1[j]) {swap(sc2, i, j); // 交换execute(sc1, sc2, i + 1, current + 1);swap(sc2, i, j); // 回溯  if (sc2[i] == sc1[j]) break; // 如果sc1和sc2的i位于j位互为相等,那么就是最优交换}}}return result = Math.min(current, result); }public void swap(char[] sc, int i, int j){char temp = sc[i];sc[i] = sc[j];sc[j] = temp;}
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

C语言手写HTTPD网站服务器

网站服务器&#xff08;HTTPD&#xff09;已经有很多版本&#xff0c;但是大部分对初学者都非常不友好。适合初学者学习的httpd服务器&#xff0c;最负盛名的当数tinyhttpd, 但是这个版本&#xff0c;是基于Linux系统的&#xff0c;而且配套的CGI也是使用perl语言写的&#xff…

宝塔面板修改secure_file_priv设置

1、secure_file_priv文件作用 mysql读取系统文件权限的设置参数 2、查询secure_file_priv设置 show variables like %secure%; 3、修改secure_file_priv设置 设置 secure_file_priv"/" 需要修改mysql配置文件my.cnf my.cnf文件有两个位置 /etc/my.cnf /www/serv…

线程安全简述

目录 1、线程是否安全 2、出现线程安全的原因如下&#xff1a; 3、原子性问题 4、synchronized关键字 1、锁对象 2、用法&#xff1a; 3、可重入锁 5、内存可见性 6、volatile关键字 7、JMM 1、线程是否安全 线程不安全就是一些代码在多线程的运行状态下&#xff0c…

一个基于.Net Core开发的适合外贸商城系统

今天给大家推荐一个适合外贸的商城系统。 项目简介 这是一个基于.Net Core开发的&#xff0c;兼容PC、平板、移动端的商城系统。被下载次数超过300w&#xff0c;拥有最活跃的成员&#xff0c;由专业团队开发与支持。支持PayPal、信用卡、发票支付。 技术架构 1、跨平台&…

Jmeter电商系统压测实战<二>

目录一、Jmeter优化tips二、Jmeter的使用建议-参数配置1. XX:MaxMataspaceSize&#xff08;jdk8的参数&#xff09;2. -Xmx2048m3. -Xms1g三、Jmeter插件1. 介绍及安装2. 常用插件四、Jmeter日志收集1. 概览2. elk&#xff0c;kibana和es的安装和配置3. Prometheus和Node Expor…

全系标配L2占比首次突破30%,「数据」赛道争夺战一触即发

智能驾驶的进阶战&#xff0c;无论是提升车型产品竞争力&#xff0c;还是为高阶功能和现有功能优化提供闭环数据迭代&#xff0c;全系标配已经成为主流趋势。 如果说智能化1.0阶段&#xff0c;车企拼的是技术的快速落地和高阶能力的标杆效应&#xff0c;那么2.0阶段就是拼规模…

python中validators库用法详解

首先安装validators库&#xff1a; pip install validators validators.between(value, minNone, maxNone) 验证一个数字value是否在最小值min和最大值max之间&#xff0c;value不仅仅可以是整数&#xff0c;也可以是其它数据类型&#xff0c;例如floats, decimals 和 dates。…

Three使用OimoPhysics实现物体相关物理特性实例

基础环境搭建&#xff1a; InstancedMesh()创建的立方体物品集合&#xff1a; boxes new THREE.InstancedMesh(new THREE.BoxGeometry(0.1, 0.1, 0.1),new THREE.MeshLambertMaterial(),100)const matrix new THREE.Matrix4()const color new THREE.Color()for (let i 0; i…

Win11 22H2 22621.521大版本更新!

注意&#xff01;注意&#xff01;Win11 22H2 22621.521大版本更新啦&#xff0c;此次更新带来了不小的优化和改进&#xff0c;包括带有标签的更新文件资源管理器、更丰富的开始菜单和任务栏体验、增强的搜索功能、对改进的安全性和无密码登录的支持等等。 让每个人都能更轻松、…

生成网络论文阅读styleGAN1(一):论文速览

研究什么内容 研究如何把生成图片当中的内容拆分开 研究方法 为了把各种风格分开先得把控制信息分开输入&#xff0c;于是作者就分开输入了&#xff0c;在PGGAN的基础上分开输入&#xff0c;取得了好的效果。 个人理解 1.这里能取得好效果的主要原因是PGGAN的逐渐提升像素…

多模块间通信存在完美的设计么?

一、前言 在 App 的使用中&#xff0c;常常会有一些功能的依赖&#xff0c;比如评论需要用户登录、支付需要用户实名绑定银行卡等。从代码开发角度而言&#xff0c;如果我们的项目使用了多模块&#xff0c;那么也就会出现模块依赖的场景&#xff0c;比如评论模块依赖登录模块提…

企业复杂的数据治理需求,TempoDF让数据开发更简单!

伴随着企业的发展以及信息化建设的不断深入&#xff0c;业务之间不关联、数据之间彼此独立、流程之间相互封闭的现象越来越普遍&#xff0c;“数据孤岛”问题愈发严重&#xff0c;已成为制约企业发展的桎梏。 为了实现企业全局数据的系统化运作管理&#xff0c;不少企业开始着…

PDF转换成PPT后格式混乱,可能这个没做好

PDF转换成PPT后格式混乱怎么处理?这类问题其实对于经常使用PPT的朋友们来说并不陌生。我们有时候需要把一篇PPT演讲稿转换成PDF文档&#xff0c;但在操作过程中常常不仅过程复杂且效果不理想。有时甚至在转化之后出现格式混乱&#xff0c;影响了阅读体验不说&#xff0c;还会让…

WPF 图片头像自由剪切器实时截图细节放大器

本文参考博文&#xff1a;WPF 自定义图片剪切器 - 头像剪切&#xff08;扩展与完善、实时截图&#xff09; 在网上找了好久都找不到合适的截图框架&#xff0c;只能用WPF 自定义图片剪切器 - 头像剪切&#xff08;扩展与完善、实时截图&#xff09;_孤夜一点星的博客-CSDN博客…

《uni-app》表单组件-form表单

本文分享的Form组件为uni-app的内置组件Form&#xff0c;非扩展组件&#xff0c;两者在用法上其实大同小异&#xff0c;只是扩展组件的属性以及事件更多…没有本质上的区别&#xff5e; 《uni-app》表单组件-form表单一. 简介二. 基础用法三. submit事件四. reset事件五. repor…

虚拟机是什么意思?

&#x1f308; 个人主页&#xff1a;python老鸟的博客 &#x1f506; 所属专栏&#xff1a;Python基础教程 ❤️ 刷题 &#x1f449; Python练习题库&#xff0c;不断更新中~~ &#x1f64f; 如果觉得博主文章对你有所帮助的话&#xff0c;还望大家多多支持呀&#xff01;关注 …

安卓APT技术讲解(下)-实现安卓组件化的路由功能

前言&#xff1a; 组件化是安卓目前很流行的一门技术&#xff0c;其目的是避免复杂的业务逻辑交织到一起&#xff0c;相互影响。通过解耦&#xff0c;让每个子项目都是一个独立的工程&#xff0c;即使其余模块出现问题&#xff0c;也不会影响这个子模块的运行。 本篇系“利用A…

为k8s节点预留资源,防止pod占用资源过多导致雪崩

Kubernetes 的节点可以按照节点的资源容量进行调度&#xff0c;默认情况下 Pod 能够使用节点全部可用容量。这样就会造成一个问题&#xff0c;因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程。除非为这些系统守护进程留出资源&#xff0c;否则它们将与 Pod 争…

70 QDateTime时间戳转换有误

1 前言 在开发工具中需要用时间戳转换成格式化时间来显示&#xff0c;但引用QT中自带的时间类QDateTime转换时&#xff0c;发现转换时间有误问题&#xff0c;转换的结果时分秒是正确的&#xff0c;但月份确实错误的。因此在未深入研究qt实现情况下&#xff0c;需要得到正确的格…

KeeWiDB:兼容Redis协议,领跑NoSQL

如果现在的我们离开了互联网&#xff0c;生活会是什么样子&#xff1f; 互联网&#xff0c;已经深刻渗透到人们的生活中。 不知道大家有没有想过&#xff1f;每一个互联网结合的背后都是海量的存储需求。你查看的每一个商品、组建的每一个战队、阅读的每一篇文章&#xff0c;…