news 2026/9/6 21:49:22

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/9/6 7:04:32

计算机毕业设计springboot考研社区网站 SpringBoot驱动的考研互助交流平台设计与实现 基于SpringBoot的考研信息共享与二手交易网站开发

计算机毕业设计springboot考研社区网站mk9kd&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 考研热度连年攀升&#xff0c;考生对资讯、资料、经验交流的即时性与集中度要求越来…

作者头像 李华
网站建设 2026/9/5 14:42:21

深度解析:智能体系统成熟后,组织面临的隐蔽风险——“创新高原期”

摘要: 随着大模型驱动的智能体从单一工具演变为高度自洽的内部协同生态,企业正面临一种隐蔽的风险——“生态位侵占”。当AI能够为95%的常规问题提供“足够好”的答案时,人类员工的认知空间被极度挤压,导致探索性动力的萎缩与颠覆性思维的断裂。本文旨在探讨AI生态如何通过…

作者头像 李华
网站建设 2026/9/4 8:08:54

行业地震的深层解读:量子技术重构测试工程师职业边界

近日某头部科技企业AI测试团队全员转型量子开发的突发新闻&#xff0c;暴露出测试领域面临的技术迭代危机与机遇。本文结合量子计算发展现状与测试工程师核心能力迁移路径&#xff0c;为从业者提供前瞻性应对策略。 一、量子技术颠覆传统测试范式的三大挑战 算法验证复杂度跃升…

作者头像 李华
网站建设 2026/9/4 11:46:16

12种RAG高级架构与方法一览,助你掌握大模型检索增强生成技术

RAG&#xff08;检索增强生成&#xff09; 曾是极其热门的话题之一。而本周非常幸运地看到了一些关于 RAG 的真正令人兴奋的新研究 让我们一起来看看近期出现的 12 种 RAG 高级架构与方法&#xff1a; 1. Mindscape-Aware RAG (MiA-RAG) 全局感知 RAG MiA-RAG 通过首先构建…

作者头像 李华
网站建设 2026/9/2 22:25:12

Spec-kit:用描述生成代码的“施工蓝图工具箱”

想象一下&#xff0c;你是一个经验丰富的产品设计师或建筑师。通常&#xff0c;你需要先撰写一份详尽的、用人类语言描述的产品需求或建筑说明&#xff0c;然后交给工程师或施工队去实现。这个过程容易出现偏差&#xff1a;工程师可能误解了某个细节&#xff0c;或者实现出来的…

作者头像 李华
网站建设 2026/9/2 23:06:59

解锁“叛逆饮”:年轻人捧红的“网红水单”是怎么来的?

叛逆&#xff0c;这届年轻人不再只是叛逆于传统的规则&#xff0c;更是叛逆于“高价的社交仪式”。在2025年的都市夜色中&#xff0c;传统的奶茶店早已不再是唯一的社交场景。取而代之的&#xff0c;是那些在写字楼下便利店门口的“微醺乐园”以及社交媒体上关于“网红水单”的…

作者头像 李华