LeetCode.3146.两个字符串的排列差

news2024/11/23 3:51:07

题目描述:
 

给你两个字符串 s 和 t,每个字符串中的字符都不重复,且 t 是 s 的一个排列。

排列差 定义为 s 和 t 中每个字符在两个字符串中位置的绝对差值之和。

返回 s 和 t 之间的 排列差 

输入输出示例:

思路一:暴力解法,直接遍历s和t两个字符串,找到相同的字符的时候我们进行对下标取差的绝对值,但是这个方法时间复杂度为O(n^2),且因为输入的最多长度为26,所以不会报超时。我们可以再进行优化。

class Solution:
    def findPermutationDifference(self, s: str, t: str) -> int:
        ans = 0 
        n,m = len(s),len(t)
        for i in range(n):
            for j in range(m):
                if s[i] == t[j] :
                    ans += abs(i-j)
        return ans

优化后的思路二:我们使用两个字典将s和t中每个字符对应的下标存储起来,然后遍历s或者是t字符串,将当前字符在两个字典中对应的值进行取差的绝对值。这样我们就相对于暴力解法优化了很多,但本身因为输入实例不多,所以时间上二者不会差很大。

class Solution:
    def findPermutationDifference(self, s: str, t: str) -> int:
        ans = 0 
        dict1 = {}
        dict2 = {}
        for i in range(len(s)):
            #用dict1记录s中各字符的下标,dict2记录t的
            dict1[s[i]] = i
            dict2[t[i]] = i
        for char_s in s:
            #同一个字符的下标相减
            ans += abs(dict1[char_s] - dict2[char_s])
        return ans

我们对思路二进行再优化,这次使用一个字典dict1用来存储s中字符以及对应的下标,然后我们遍历t字符串,将t中当前字符的下标与dict1中该字符对应的值作差的绝对值。

class Solution:
    def findPermutationDifference(self, s: str, t: str) -> int:
        ans = 0 
        dict1 = {}
        #将s下标与字符存到字典
        for index,char_s in enumerate(s):
            dict1[char_s] = index
        
        for index,char_t in enumerate(t):
            #找t当前字符的下标差
            ans += abs(dict1[char_t] - index)
        return ans

 

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

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

相关文章

TMC2209模块开启无限位归零

TMC2209无限位归零配置步骤: 3.1 配置内部采样电阻。具体在GCONF中internal_Rsens 1; 此步发送数据 05 00 80 00 00 00 83 00 3.2 电机电流设置,配置IHOLD_RUN寄存器; 此处发送数据 05 00 90 00 00 16 16 12 3.3 设置失速电流阈…

QT接收并解析GPS模块串口数据

目录 一、QT读取串口数据 二、解析数据 目标: 使用QT,读取gps模块的串口数据,并解析其中的经纬高数据,然后进行处理 一、QT读取串口数据 变量定义 QSerialPort *serial; QSerialPortInfo SerialPortInfo; QByteArray lineData…

Deepin【2】:Deepin系统盘扩容

Deepin【2】:Deepin系统盘扩容 1、进入live系统1.1、live系统入步骤 2、连接网络3、新增系统仓库4、安装gparted应用5、使用gparted进行扩容操作5.1、观察当前分区5.2、压缩data分区5.3、Rootb分区合并空闲空间5.4、Rootb分区压缩空间5.5、Roota合并空闲空间5.6、核…

【学习笔记】STM32F407探索者HAL库开发(二)STM32F4最小系统设计

【学习笔记】STM32F407探索者HAL库开发(二)STM32F4最小系统设计 0 什么是最小系统1 电源电路1.1 数字部分电源1.2 模拟部分电源1.3 参考电压1.4 VBAT 2 复位电路3 BOOT启动电路(F4)4 晶振电路4.1 低速晶振4.2 高速晶振 5 下载调试…

计算机操作员试题(公共科目)

计算机操作员试题(公共科目) ★★★ RZer整理 仅供参考 ★★★ 单项选择题 “人的本质”这一概念是人对自身的认识发展到一定阶段形成的,它力图从根本上回答“人是什么”或“什么是人”这一重大问题。马克思主义认为,人的本质( )。 A.永恒不变 B.可随主观意志而任意改变 C…

【Material-UI】Radio Group中的 Color 属性详解

文章目录 一、Radio Group 组件概述1. 组件介绍2. 基本用法 二、Color 属性详解1. Color 属性的作用2. 使用 Color 属性设置颜色3. 自定义颜色 三、Color 属性的实际应用场景1. 品牌一致性2. 状态指示3. 突出特定选项 四、注意事项1. 色彩对比2. 无障碍设计3. 主题定制 五、总结…

electron仿微信,点击子窗口以外的区域时、关闭子窗口

环境 windows:PC微信 我们可以看到,微信聊天界面点击右上角三个点时,会显示这个人的聊天信息窗口,我们把鼠标点击在其他位置时,这个聊天信息窗口就消失了,那么,这是怎么实现的呢,能…

Git的使用教程及常用语法02

四.将文件添加到仓库 创建仓库 git init查看仓库的状态 git status 添加到暂存区 git add提交 git commitgit status 可以查看当前仓库的状态信息,例如包含哪些分支,有哪些文件以及这些文件当前处在怎样的一个状态。 由于当前没有存储任何的东西&…

深度解析丨AI绘画StableDiffusion如何实现模特精准换装,以及如何将假人模特替换成真人模特!

大家好,我是灵魂画师向阳 今天给大家分享一下用AI绘画Stable Diffusion 进行模特换装!本篇教程主要运用StableDiffusion这个工具来进行操作,下面会通过几个小案例,给大家展示不同需求下,我们该如何使用StableDiffusio…

Linux查看jvm相关参数以及设置调优参数

1、查看jvm相关参数 1.1、查看Java进程命令 jcmd会显示出来对应的Java进程id 1.2、查看堆内存各个区域的使用大小、具体大小和GC次数以及耗时 jstat -gc 4036145jstat -gc 进程id 各个参数的含义。 如上图,4036145的进程,FGCT是0.452,FGC是4.平均每次full gc耗时0.11秒。 …

如何选择行为审计管理软件?值得收藏的三款行为审计管理软件

在选择行为审计管理软件时,企业需要考虑多个方面以确保所选软件能够满足其特定的需求和目标。以下是一些关键的选择标准,以及基于这些标准推荐的三款优秀软件。 选择行为审计管理软件的关键标准 1.功能全面性:软件应覆盖行为审计的各个方面&…

Godot《躲避小兵》实战之为游戏添加音效

现在,我们已经完成了游戏的所有功能。以下是一些剩余的步骤,为游戏加点“料”,改善游戏体验。 随意用你自己的想法扩展游戏玩法。 背景 默认的灰色背景不是很吸引人,那么我们就来改一下颜色。一种方法是使用 ColorRect节点。将…

JavaScript学习文档(6):什么是对象、对象使用、遍历对象、内置对象、术语解释

目录 一、什么是对象 1、对象是什么 二、对象使用 1、对象使用 2、对象有属性和方法组成 (1)对象属性(增删改查) (2)对象方法 三、遍历对象 1、遍历对象 2、渲染学生信息案例 四、内置对象 1、…

旅游行业怎么利用C#接口发送短信

旅游企业一般拥有众多的分支机构,同时各地分支机构又有众多下属分散在当地各区的旅游营业报名点,以前传统的解决方案是采用专线、MODEM拔号等方式,专线的成本很高,MODEM拔号更费时,且长途拔号互联成本在多点情况下费用…

scikit-learn特征抽取

为什么需要特征工程 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已 什么是特征工程 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程 意义:会直接影响机器学习的效果 特征…

Type-C无线麦克风方案

在数字化浪潮的推动下,音频设备正经历着前所未有的变革。从传统的有线麦克风到如今的蓝牙无线麦克风,每一次技术的飞跃都极大地丰富了我们的音频体验。而今,随着Type-C接口的普及与技术的不断成熟,Type-C无线麦克风正悄然成为音频…

数据结构----红黑树

小编会一直更新数据结构相关方面的知识,使用的语言是Java,但是其中的逻辑和思路并不影响,如果感兴趣可以关注合集。 希望大家看完之后可以自己去手敲实现一遍,同时在最后我也列出一些基本和经典的题目,可以尝试做一下。…

DRF——Filter条件搜索模块

文章目录 条件搜索自定义Filter第三方Filter内置Filter 条件搜索 如果某个API需要传递一些条件进行搜索,其实就在是URL后面通过GET传参即可,例如: /api/users?age19&category12在drf中也有相应组件可以支持条件搜索。 自定义Filter …

学习2d直线拟合-2

参考文章 直线拟合算法(续:加权最小二乘)_加权拟合直线法-CSDN博客 对比了参考文中和opencv中的直线拟合权重,不知道理解的对不对,前者是权重平方,后者没有平方

迷雾大陆辅助:VMOS云手机助力升级装备系统秘籍!

在《迷雾大陆》的广阔世界中,装备的选择和获取对于每一位冒险者来说都是至关重要的。为了让玩家能够更轻松地管理装备并在冒险中获得更高的效率,VMOS云手机提供了专属定制版云手机,内置游戏安装包,不需要重新下载安装游戏。VMOS云…