news 2026/6/4 18:06:42

LeetCode 2976.转换字符串的最小成本 I:floyd算法(全源最短路)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 2976.转换字符串的最小成本 I:floyd算法(全源最短路)

【LetMeFly】2976.转换字符串的最小成本 I:floyd算法(全源最短路)

力扣题目链接:https://leetcode.cn/problems/minimum-cost-to-convert-string-i/

给你两个下标从0开始的字符串sourcetarget,它们的长度均为n并且由小写英文字母组成。

另给你两个下标从0开始的字符数组originalchanged,以及一个整数数组cost,其中cost[i]代表将字符original[i]更改为字符changed[i]的成本。

你从字符串source开始。在一次操作中,如果存在任意下标j满足cost[j] == zoriginal[j] == x以及changed[j] == y。你就可以选择字符串中的一个字符x并以z的成本将其更改为字符y

返回将字符串source转换为字符串target所需的最小成本。如果不可能完成转换,则返回-1

注意,可能存在下标ij使得original[j] == original[i]changed[j] == changed[i]

示例 1:

输入:source = "abcd", target = "acbe", original = ["a","b","c","c","e","d"], changed = ["b","c","b","e","b","e"], cost = [2,5,5,1,2,20]输出:28解释:将字符串 "abcd" 转换为字符串 "acbe" : - 更改下标 1 处的值 'b' 为 'c' ,成本为 5 。 - 更改下标 2 处的值 'c' 为 'e' ,成本为 1 。 - 更改下标 2 处的值 'e' 为 'b' ,成本为 2 。 - 更改下标 3 处的值 'd' 为 'e' ,成本为 20 。 产生的总成本是 5 + 1 + 2 + 20 = 28 。 可以证明这是可能的最小成本。

示例 2:

输入:source = "aaaa", target = "bbbb", original = ["a","c"], changed = ["c","b"], cost = [1,2]输出:12解释:要将字符 'a' 更改为 'b': - 将字符 'a' 更改为 'c',成本为 1 - 将字符 'c' 更改为 'b',成本为 2 产生的总成本是 1 + 2 = 3。 将所有 'a' 更改为 'b',产生的总成本是 3 * 4 = 12 。

示例 3:

输入:source = "abcd", target = "abce", original = ["a"], changed = ["e"], cost = [10000]输出:-1解释:无法将 source 字符串转换为 target 字符串,因为下标 3 处的值无法从 'd' 更改为 'e' 。

提示:

  • 1 <= source.length == target.length <= 105
  • sourcetarget均由小写英文字母组成
  • 1 <= cost.length== original.length == changed.length <= 2000
  • original[i]changed[i]是小写英文字母
  • 1 <= cost[i] <= 106
  • original[i] != changed[i]

解题方法:floyd算法

如何将source字符串变为target字符串?必须一个字符一个字符地通过cost[i]的代价将original[i]变为changed[i]来实现。

不难发现source中每个字符是独立的,并且从一个字符a aa经过数次变化最终变为字符b bb的最小代价也是固定的,所以我们不妨先计算出26 × 26 26\times 2626×26种字母的转换方式分别最少需要花费多少代价:

将26个字母看成图中26个顶点,

假设通过cost[i]的代价可以将original[i]变为changed[i],那么就看作有一个从节点original[i]指向节点changed[i]且代价为cost[i]的边。

floyd算法最适合算这个了,初始化floyd[i][i]=0,有直接a指向b的边的初始化floyd[a][b]为a指向b中代价最小的边,其他初始化为正无穷。然后:

for(intk=0;k<26;k++){for(inti=0;i<26;i++){for(intj=0;j<26;j++){floyd[i][j]=min(floyd[i][j],floyd[i][k]+floyd[k][j]);}}}

就计算出任何一个字母转为另一个字母的最小代价了。

对original字符串中每个字母做最小代价转换,累加并返回答案或-1即可。

  • 时间复杂度O ( l e n ( o r i g i n a l ) + l e n ( o r i g i n a l ) + C 2 ) O(len(original)+len(original)+C^2)O(len(original)+len(original)+C2),其中C = 16 C=16C=16
  • 空间复杂度O ( C 2 ) O(C^2)O(C2)

AC代码

C++
/* * @LastEditTime: 2026-01-31 12:22:44 */typedeflonglongll;classSolution{public:longlongminimumCost(string source,string target,vector<char>&original,vector<char>&changed,vector<int>&cost){ll floyd[26][26];memset(floyd,0x3f,sizeof(floyd));for(inti=0;i<26;i++){floyd[i][i]=0;}for(inti=0;i<original.size();i++){intx=original[i]-'a';inty=changed[i]-'a';floyd[x][y]=min(floyd[x][y],(ll)cost[i]);}for(intk=0;k<26;k++){for(inti=0;i<26;i++){for(intj=0;j<26;j++){floyd[i][j]=min(floyd[i][j],floyd[i][k]+floyd[k][j]);}}}ll ans=0;for(inti=0;i<source.size();i++){ll cost=floyd[source[i]-'a'][target[i]-'a'];if(cost>1000000000000){return-1;}ans+=cost;}returnans;}};

对了,邀请你看几个好看的hash:

  1. 8888a4
  2. 00009f
  3. 000097

还带签名的。

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 23:03:52

2026年软件测试公众号热点解析:AI工作疲劳警报系统下的爆款密码

一、头条事件背景与软件测试的关联 2026年1月&#xff0c;中国正式强制推行AI工作疲劳警报系统&#xff0c;要求企业部署实时监测工具预防员工过劳。这一政策源于AI技术的爆发式演进&#xff0c;如具身智能在工业场景的成熟应用&#xff0c;能通过视觉系统在毫秒级识别工作状态…

作者头像 李华
网站建设 2026/6/2 23:03:53

情感化量子测试:当代码需要“共情力”

在软件测试领域&#xff0c;传统方法往往聚焦于功能正确性和性能指标&#xff0c;却忽略了用户情感体验这一关键维度。随着AI和量子计算技术的演进&#xff0c;“情感化量子测试”应运而生——它比喻将量子级精准的情感分析能力融入测试流程&#xff0c;让代码具备“共情力”&a…

作者头像 李华
网站建设 2026/5/28 23:10:57

当AI测出我的职业焦虑症:软件测试者的破局三法则

凌晨三点&#xff0c;我盯着自动化测试脚本生成的满屏绿勾&#xff0c;心里却一片荒芜——AI用10分钟完成了我两天的工作量&#xff0c;而我的价值正被它精准“测试”着。 一、焦虑溯源&#xff1a;技术浪潮下的能力断层 2026年的测试领域&#xff0c;AI已从辅助工具升级为“超…

作者头像 李华
网站建设 2026/5/20 11:37:12

量子机器学习纠错:5行代码实战入门——软件测试专家的前沿探索指南

量子机器学习&#xff08;QML&#xff09;正重塑人工智能的未来&#xff0c;但其核心挑战在于量子系统的固有脆弱性&#xff1a;量子比特极易受噪声干扰导致计算错误。纠错技术成为确保QML可靠性的关键&#xff0c;而软件测试从业者在验证系统鲁棒性方面拥有天然优势。本文从专…

作者头像 李华
网站建设 2026/5/28 19:27:11

AI Coding Pattern 解析

1. 它是什么 AI Coding Pattern 可以理解为在软件开发中&#xff0c;利用人工智能&#xff08;特别是大语言模型&#xff09;辅助或执行编程任务的一系列固定思路、方法和步骤。它不是某个具体的工具&#xff0c;而是一种工作范式。 这类似于使用导航软件开车。导航本身不是车…

作者头像 李华