news 2026/9/3 5:51:50

leetcode 2977(Dijkstra + DP)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 2977(Dijkstra + DP)

2977: 转换字符串的最小成本Ⅱ

思路:动态规划 + 图最短路径

  • 不相交性质:转换操作的子串要么完全相同,要么不相交。这意味着每个位置只需考虑直接转换到最终状态,无需考虑中间转换步骤。

  • 子串独立性:可以将问题分解为:将source的前i个字符变为target的前i个字符的最小代价。

class Solution { public: long long minimumCost(string source, string target, vector<string>& original, vector<string>& changed, vector<int>& cost) { int n=source.size(); set<int> lens; for(const auto& str:original) lens.insert(static_cast<int>(str.size())); unordered_set<string> orig(original.begin(),original.end()); unordered_set<string> chan(changed.begin(),changed.end()); //初始化dp vector<long long> dp(n+1,LONG_LONG_MAX); dp[0]=0; //构建图 unordered_map<string,vector<pair<string,int>>> graph; for(int i=0;i<original.size();i++){ graph[original[i]].emplace_back(changed[i],cost[i]); } //dijkstra单源最短路径 auto dijkstra=[&graph, &changed](string& src){ unordered_set<string> visited; unordered_map<string,long long> dist; for(const auto& dest:changed){ dist[dest]=LONG_LONG_MAX; } dist[src]=0; for(int i=0;i<changed.size();i++){ auto min_dist=LONG_LONG_MAX; string min_dest; for(const auto& [dest,dist]:dist){ if(!visited.contains(dest) && dist<min_dist){ min_dist=dist; min_dest=dest; } } if(min_dist==LONG_LONG_MAX) return dist; visited.insert(min_dest); dist[min_dest]=min_dist; for(const auto& [neighbour,weight]:graph[min_dest]){ if(!visited.contains(neighbour) && min_dist+weight<dist[neighbour]){ dist[neighbour]=min_dist+weight; } } } return dist; }; unordered_map<string,unordered_map<string,long long>> dist; for(int i=1;i<=n;i++){ int j=0; while(j<*lens.rbegin() && i-j-1>=0 && source[i-j-1]==target[i-j-1]){ dp[i]=min(dp[i],dp[i-j-1]); j++; } if(j==*lens.rbegin()) continue; //逐个尝试替换不同长度的子串 for(auto begin=lens.upper_bound(j);begin!=lens.end() && *begin<=i;begin++){ auto len=*begin; auto src=source.substr(i-len,len); auto dest=target.substr(i-len,len); if(src!=dest && orig.contains(src) && chan.contains(dest) && dp[i-len]!=LONG_LONG_MAX){ if(!dist.contains(src)) dist[src]=dijkstra(src); if(dist[src][dest]!=LONG_LONG_MAX){ dp[i]=min(dp[i],dp[i-len]+dist[src][dest]); } } } } return dp[n]==LONG_LONG_MAX ? -1:dp[n]; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:53:20

揭秘云端巨兽:AWS S3 如何在百亿亿级规模下重塑存储与 AI 的未来

在云计算的世界里,S3(Simple Storage Service)往往被视为最基础的水电煤——一个无限吞吐、永不丢失的“网络硬盘”。然而,当我们剥开其简单的 PUT 和 GET 接口,展现在眼前的实际上是人类历史上构建的最庞大的分布式系统之一。 目前,S3 存储着超过 500 万亿(500 Trilli…

作者头像 李华
网站建设 2026/9/2 21:54:02

2026年DeepSeek写的论文AI率太高?这3款降AI工具亲测有效

2026年DeepSeek写的论文AI率太高&#xff1f;这3款降AI工具亲测有效 92%。这是我用DeepSeek写完论文后&#xff0c;知网检测出来的AI率。当时我整个人都懵了&#xff0c;距离答辩只剩两周&#xff0c;导师说AI率必须降到15%以下。 先说结论&#xff1a;试了各种方法后&#x…

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

基于Android系统的个人记账备忘录的设计与实现论文

目录 研究背景与意义核心功能设计技术实现方案创新点分析测试与优化应用场景扩展 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 研究背景与意义 随着移动互联网普及&#xff0c;个人财务管理需求日益增…

作者头像 李华
网站建设 2026/9/2 9:08:13

计算机毕设java高校多媒体教室管理系统 Java技术驱动的高校多媒体教室智能管理系统开发 基于Java的高校多媒体教室综合管理平台设计与实现

计算机毕设java高校多媒体教室管理系统br4r79 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着信息技术的飞速发展&#xff0c;高校的教学环境也在不断升级。传统的多媒体教…

作者头像 李华