2606 找到最大开销的子字符串
题目链接:2606. 找到最大开销的子字符串
方法:动态规划
解题思路
实际是:子数组最大和
- 初始化每个字母的价值,保存在
vector<int> value(26)
中; - 设
表示以 结尾的子字符串的最大开销,那么就可以使得dp[i + 1]和dp[i]联系起来,有两种情况:- 将
接到上一个子字符串的后面,dp[i - 1] + value[s[i+1] - 'a']
; - 选择
为子字符串的起点,value[s[i+1] - 'a']
。
- 将
- 取其中最大开销:
; - 然后答案就是所有以
结尾的子字符串最大开销中的最大值。 - 优化
数组为 ,有上述的计算过程可知,当前的 值只和上一个 值有关,那么只需要用一个 变量就可以。
代码
class Solution {
public:
int maximumCostSubstring(string s, string chars, vector<int>& vals) {
vector<int> value(26);
for (int i = 0; i < 26; i ++ ) value[i] = i + 1;
for (int i = 0; i < chars.length(); i ++ ) value[chars[i] - 'a'] = vals[i];
int dp = 0, ans = 0;
for (auto &c : s) {
dp = max(dp + value[c - 'a'], value[c - 'a']);
ans = max(ans, dp);
}
return ans;
}
};
复杂度分析
时间复杂度:
空间复杂度:
分类:
leetcode题解
标签:
动态规划
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】