leetcode双周赛149 T4(DP + 输出具体方案)
题目链接:problem
: 从 转移而来(意味着最优方案下 ) : 从 转移而来(意味着最优方案下 )
注意当后者的
按照该转移式
复杂度:
代码:
class Solution {
#define inf 0x3f3f3f3f
int f[50010][26];
int nxt[50010][26];
int minj[50010];
public:
string minCostGoodCaption(string str) {
int n = str.size();
if(n < 3){
return "";
}
for(int i = n - 1; i >= 0; i--){
int mn = inf;
for(int j = 0; j < 26; j++){
int res1 = f[i + 1][j] + abs(str[i] - 'a' - j);
int res2 = inf;
if(i <= n - 6){
for(int k = 0; k < 26; k++){
res2 = min(res2, f[i + 3][k] + abs(str[i] - 'a' - j) + abs(str[i + 1] - 'a' - j)
+ abs(str[i + 2] - 'a' - j));
}
}
if(res2 < res1 || (res2 == res1 && minj[i + 3] < j)){
nxt[i][j] = minj[i + 3];
} else{
nxt[i][j] = j;
}
f[i][j] = min(res1, res2);
if(f[i][j] < mn){ // 保证了构造出的最优方案下的字符串的字典序最小
mn = f[i][j];
minj[i] = j;
}
}
}
string ans(n, 0);
int i = 0, j = minj[0];
while(i < n){
ans[i] = 'a' + j;
int k = nxt[i][j];
if(k == j){
i++;
}else{
ans[i + 2] = ans[i + 1] = ans[i];
i += 3;
j = k;
}
}
return ans;
}
};
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战