Skip to content

Commit 6875b50

Browse files
committed
Implement minimum-deletion-cost-to-avoid-repeating-letters
name: minimum-deletion-cost-to-avoid-repeating-letters url: https://leetcode.com/problems/minimum-deletion-cost-to-avoid-repeating-letters difficulty: medium time: 264ms time-rank: 95.54% time-complexity: O(N) space: 95.9MB space-rank: 24.79% space-complexity: O(1) Fixes #280 Signed-off-by: Christopher Friedt <[email protected]>
1 parent 3acef1a commit 6875b50

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright (c) 2021, Christopher Friedt
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*/
6+
7+
#include <gtest/gtest.h>
8+
9+
#include "minimum-deletion-cost-to-avoid-repeating-letters.cpp"
10+
11+
using namespace std;
12+
13+
TEST(MinimumDeletionCostToAvoidRepeatingLetters, abaac__1_2_3_4_5) {
14+
string s = "abaac";
15+
vector<int> cost = {
16+
1, 2, 3, 4, 5
17+
};
18+
EXPECT_EQ(3, Solution().minCost(s, cost));
19+
}
20+
21+
TEST(MinimumDeletionCostToAvoidRepeatingLetters, abc__1_2_3) {
22+
string s = "abc";
23+
vector<int> cost = {
24+
1, 2, 3,
25+
};
26+
EXPECT_EQ(0, Solution().minCost(s, cost));
27+
}
28+
29+
TEST(MinimumDeletionCostToAvoidRepeatingLetters, aabaa__1_2_3_4_1) {
30+
string s = "aabaa";
31+
vector<int> cost = {
32+
1, 2, 3, 4, 1
33+
};
34+
EXPECT_EQ(2, Solution().minCost(s, cost));
35+
}
36+
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright (c) 2021, Christopher Friedt
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*/
6+
7+
#include <algorithm>
8+
#include <vector>
9+
10+
using namespace std;
11+
12+
// name: minimum-deletion-cost-to-avoid-repeating-letters
13+
// url: https://leetcode.com/problems/minimum-deletion-cost-to-avoid-repeating-letters
14+
// difficulty: 2
15+
16+
class Solution {
17+
public:
18+
19+
20+
int minCost(string s, vector<int>& cost) {
21+
/*
22+
i p s[i] c[i] mn mx
23+
=====================
24+
0 - a 1 1 1
25+
1 a a 2 3 2
26+
2 a b 3 1 1
27+
3 b a 4 5 4
28+
4 a a 1 6 4
29+
*/
30+
int max_cost;
31+
int min_cost = 0;
32+
char prev = '\0';
33+
for(size_t i = 0, N = s.size(); i < N; prev = s[i], ++i) {
34+
if (s[i] == prev) {
35+
max_cost = max(max_cost, cost[i]);
36+
min_cost += cost[i];
37+
if (i == N - 1 || s[i + 1] != prev) {
38+
min_cost -= max_cost;
39+
}
40+
} else {
41+
max_cost = cost[i];
42+
if (i < N - 1 && s[i+1] == s[i]) {
43+
min_cost += cost[i];
44+
}
45+
}
46+
}
47+
48+
return min_cost;
49+
}
50+
};

0 commit comments

Comments
 (0)