题目地址:
https://leetcode.com/problems/minimum-time-to-make-rope-colorful/description/
给定一个长 n n n的字符串 s s s,每个位置上的字母的删除代价由一个数组 c c c给出,删除 s [ i ] s[i] s[i]的代价为 c [ i ] c[i] c[i](删除的时候假定字母的下标没有改变)。问要使得 s s s相邻字母都不同,最小的删除总代价是多少。
对一段相同字母的片段,只能保留一个字符,显然保留代价最大的字母最好,所以就删掉除了代价最大的那个字符以外的字符。代码如下:
class Solution {
public:
int minCost(string s, vector<int>& cost) {
int res = 0;
for (int i = 0; i < s.size(); i++) {
int j = i, mx = 0, sum = 0;
while (j < s.size() && s[j] == s[i]) {
mx = max(mx, cost[j]);
sum += cost[j++];
}
i = j - 1;
res += sum - mx;
}
return res;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。