Leetcode 2976. Minimum Cost to Convert String I

本文详细讲解LeetCode2976题,涉及有向图和Floyd算法,Python代码演示如何计算字符串转换最小成本,运行时间为1963ms,内存占用19.1MB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 解题思路

这道题思路上其实是非常直接的,本质上就是给出有向图之后,求出有向图上任意两点之间的最短距离,然后考察将source字符串转换为target字符串时所需要的cost。

因此,难度上来说就是在给定一系列有向变换路径之后怎么求任意两个可行的变换之间的最小cost,这个用Floyd算法就能够直接获得了,有点类似Leetcode 2959,之前也写过一个博客介绍过那道题的解答,这里基本就直接复制之前的Floyd算法就行了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minimumCost(self, source: str, target: str, original: List[str], changed: List[str], cost: List[int]) -> int:
        graph = defaultdict(list)
        for u, v, c in zip(original, changed, cost):
            graph[u].append((v, c))
            
        costs = [[0 if i == j else math.inf for j in range(26)] for i in range(26)]
        for u, v, c in zip(original, changed, cost):
            u, v = ord(u) - ord('a'), ord(v) - ord('a')
            costs[u][v] = min(costs[u][v], c)
        for k in range(26):
            for i in range(26):
                for j in range(26):
                    costs[i][j] = min(costs[i][k]+costs[k][j], costs[i][j])
            
        ans = 0
        for u, v in zip(source, target):
            u, v = ord(u) - ord('a'), ord(v) - ord('a')
            if costs[u][v] == math.inf:
                return -1
            ans += costs[u][v]
        return ans

提交代码评测得到:耗时1963ms,占用内存19.1MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值