news 2026/5/1 9:16:50

【LeetCode 每日一题】2976. 转换字符串的最小成本 I

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【LeetCode 每日一题】2976. 转换字符串的最小成本 I

Problem: 2976. 转换字符串的最小成本 I

文章目录

整体思路

1. 核心问题

我们需要将source字符串转换为target字符串。转换规则由original,changed,cost数组给出,表示将字符original[i]变为changed[i]需要花费cost[i]
转换具有传递性(例如a -> b -> c),我们需要求出总的最小成本。如果无法转换,返回 -1。

2. 算法与逻辑步骤

这是一个典型的多源最短路径问题

  1. 图的建模

    • 将 26 个小写英文字母看作图中的 26 个节点(‘a’ 对应 0,…,‘z’ 对应 25)。
    • 输入的转换规则即为图中的有向边,权重为转换成本。
    • 我们需要计算任意两个字符之间的最小转换代价。
  2. Floyd-Warshall 算法

    • 由于节点数固定且非常少(仅 26 个),Floyd-Warshall 算法是解决此问题的最佳选择。它可以一次性计算出所有节点对之间的最短路径。
    • 初始化:创建一个26 × 26 26 \times 2626×26的矩阵minCosts
      • 对角线(自己转自己)设为 0。
      • 其他位置初始化为无穷大(这里用Integer.MAX_VALUE / 2防止加法溢出)。
      • 根据输入的边 (original,changed,cost) 更新矩阵。注意可能有重边(多条规则描述同一种转换),取最小值。
    • 三重循环松弛:通过中间节点k,尝试优化从ij的路径:minCosts[i][j] = min(minCosts[i][j], minCosts[i][k] + minCosts[k][j])
  3. 计算总成本

    • 预处理完成后,我们拥有了一个查找表minCosts,可以在O ( 1 ) O(1)O(1)时间内查询任意字符转换的最优代价。
    • 遍历sourcetarget字符串,逐个字符查询转换成本并累加。
    • 如果在任意位置查询到的成本为无穷大(UNREACHABLE),说明不可达,立即返回 -1。

完整代码

importjava.util.Arrays;classSolution{publiclongminimumCost(Stringsource,Stringtarget,char[]original,char[]changed,int[]cost){// 定义一个足够大的数表示不可达,但不能是 Integer.MAX_VALUE,否则相加会溢出finalintUNREACHABLE=Integer.MAX_VALUE/2;// 字母表大小,固定为 26finalintALPHABET_SIZE=26;// minCosts[i][j] 存储从字符 i 转换到字符 j 的最小成本int[][]minCosts=newint[ALPHABET_SIZE][ALPHABET_SIZE];// 1. 初始化距离矩阵for(inti=0;i<ALPHABET_SIZE;i++){// 默认所有转换都不可达Arrays.fill(minCosts[i],UNREACHABLE);// 字符转换为自身的成本为 0minCosts[i][i]=0;}// 2. 根据输入构建初始图for(inti=0;i<cost.length;i++){intfromIndex=original[i]-'a';inttoIndex=changed[i]-'a';// 注意:输入中可能存在多条相同起止点的边,必须取最小值minCosts[fromIndex][toIndex]=Math.min(minCosts[fromIndex][toIndex],cost[i]);}// 3. 使用 Floyd-Warshall 算法计算所有节点对的最短路径// k 是中间节点for(intk=0;k<ALPHABET_SIZE;k++){// i 是起始节点for(inti=0;i<ALPHABET_SIZE;i++){// 剪枝:如果起点到中间点不可达,就没必要继续看了if(minCosts[i][k]==UNREACHABLE){continue;}// j 是终点for(intj=0;j<ALPHABET_SIZE;j++){// 状态转移:比较 "直接从 i 到 j" 和 "经由 k 从 i 到 j" 的成本if(minCosts[k][j]!=UNREACHABLE){minCosts[i][j]=Math.min(minCosts[i][j],minCosts[i][k]+minCosts[k][j]);}}}}// 4. 计算 source 转换到 target 的总成本longtotalCost=0;// 使用 long 防止总成本溢出 int 范围intlen=source.length();for(inti=0;i<len;i++){intsourceCharIdx=source.charAt(i)-'a';inttargetCharIdx=target.charAt(i)-'a';// 查表获取最小转换成本intcurrentPairCost=minCosts[sourceCharIdx][targetCharIdx];// 如果某个字符无法转换,说明整个任务失败if(currentPairCost==UNREACHABLE){return-1;}totalCost+=currentPairCost;}returntotalCost;}}

时空复杂度

假设source的长度为N NN,转换规则数组(边)的长度为M MM,字符集大小为C CC(本题中C = 26 C=26C=26)。

1. 时间复杂度:O ( N + M + C 3 ) O(N + M + C^3)O(N+M+C3)

  • 初始化图:遍历M MM条边,耗时O ( M ) O(M)O(M)
  • Floyd-Warshall 算法:包含三重循环,每重循环次数为C CC,耗时O ( C 3 ) O(C^3)O(C3)。由于C = 26 C=26C=26,这是一个非常小的常数(26 3 ≈ 1.7 × 10 4 26^3 \approx 1.7 \times 10^42631.7×104)。
  • 计算总成本:遍历长度为N NN的字符串,每次查表O ( 1 ) O(1)O(1),耗时O ( N ) O(N)O(N)
  • 总计O ( N + M + C 3 ) O(N + M + C^3)O(N+M+C3)。在实际应用中,N NN通常是主导项。

2. 空间复杂度:O ( C 2 ) O(C^2)O(C2)

  • 距离矩阵:我们需要一个C × C C \times CC×C的二维数组minCosts来存储最短路径。
  • 结论O ( C 2 ) O(C^2)O(C2),对于C = 26 C=26C=26,空间消耗极小且固定。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:23:35

I2S协议采样率同步机制解析:数据流连续性保障原理

以下是对您提供的博文《IS协议采样率同步机制解析:数据流连续性保障原理》进行 深度润色与结构重构后的技术文章 。优化目标明确: ✅ 彻底去除AI痕迹 ,语言更贴近一线嵌入式音频工程师的实战口吻; ✅ 打破模板化章节结构 ,以“问题驱动+逻辑递进”组织内容,自然过…

作者头像 李华
网站建设 2026/4/17 20:34:57

小白必看!CogVideoX-2b文字转视频保姆级入门指南

小白必看&#xff01;CogVideoX-2b文字转视频保姆级入门指南 你是不是也幻想过&#xff1a;敲几行字&#xff0c;就能让画面动起来&#xff1f;不用学剪辑、不用配设备、不求人帮忙——一段“阳光洒在咖啡杯上&#xff0c;蒸汽缓缓升腾&#xff0c;窗外梧桐叶轻轻摇曳”的文字…

作者头像 李华
网站建设 2026/4/30 23:07:56

YOLO X Layout实战教程:基于Flask封装API实现企业内部文档微服务

YOLO X Layout实战教程&#xff1a;基于Flask封装API实现企业内部文档微服务 1. 什么是YOLO X Layout文档理解模型 YOLO X Layout不是传统意义上的OCR文字识别工具&#xff0c;而是一个专注文档“结构理解”的智能分析模型。它不关心文字具体是什么内容&#xff0c;而是像一位…

作者头像 李华
网站建设 2026/4/18 3:03:56

手把手教你用HG-ha/MTools做专业级图片视频编辑

手把手教你用HG-ha/MTools做专业级图片视频编辑 你是不是也遇到过这些情况&#xff1a;想给一张产品图换背景&#xff0c;却卡在PS图层蒙版上半天调不好&#xff1b;想把几张照片做成带转场的短视频&#xff0c;结果导出要等二十分钟&#xff1b;想加个AI字幕&#xff0c;又得…

作者头像 李华
网站建设 2026/4/18 14:03:43

HG-ha/MTools作品集:AI辅助生成工业设备操作手册+3D分解图+AR扫码指引

HG-ha/MTools作品集&#xff1a;AI辅助生成工业设备操作手册3D分解图AR扫码指引 1. 开箱即用&#xff1a;三分钟上手工业文档智能生成 你有没有遇到过这样的场景&#xff1a;一台新采购的数控机床刚到厂里&#xff0c;随附的操作手册还是十年前的PDF扫描件&#xff0c;字迹模…

作者头像 李华