【leetcode】1578. Minimum Deletion Cost to Avoid Repeating Letters
题目如下:
Given a string
sand an array of integerscostwherecost[i]is the cost of deleting theithcharacter ins.Return the minimum cost of deletions such that there are no two identical letters next to each other.
Notice that you will delete the chosen characters at the same time, in other words, after deleting a character, the costs of deleting other characters will not change.
Example 1:
Input: s = "abaac", cost = [1,2,3,4,5] Output: 3 Explanation: Delete the letter "a" with cost 3 to get "abac" (String without two identical letters next to each other).Example 2:
Input: s = "abc", cost = [1,2,3] Output: 0 Explanation: You don't need to delete any character because there are no identical letters next to each other.Example 3:
Input: s = "aabaa", cost = [1,2,3,4,1] Output: 2 Explanation: Delete the first and the last character, getting the string ("aba").
Constraints:
s.length == cost.length1 <= s.length, cost.length <= 10^51 <= cost[i] <= 10^4scontains only lowercase English letters.
解题思路:四个月前写的代码了,突然有点看不懂为什么这么做。先mark一下,后面再编辑。
代码如下:
class Solution(object): def minCost(self, s, cost): """ :type s: str :type cost: List[int] :rtype: int """ res = 0 consecutive_char = None max_cost = 0 total_cost = 0 s += '#' cost += [0] for i,c in zip(s,cost): if consecutive_char == None: consecutive_char = i max_cost = c total_cost = c elif i != consecutive_char: res += (total_cost - max_cost) max_cost = c total_cost = c consecutive_char = i elif i == consecutive_char: max_cost = max(max_cost,c) total_cost += c return res
浙公网安备 33010602011771号