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

题目描述:
 

给你两个字符串 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

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值