LeetCode题目5509. 避免重复字母的最小删除成本
第一次LeetCode用python提交双100感觉可以记录一下,各位大佬别见笑
题目描述:给你一个字符串 s 和一个整数数组 cost ,其中 cost[i] 是从 s 中删除字符 i 的代价。
返回使字符串任意相邻两个字母不相同的最小删除成本。
请注意,删除一个字符后,删除其他字符的成本不会改变。
思路:如果出现连续字符,用双指针i, j表示该连续字符的起始与结束位置,因为字符不能重复,即这段字符s[i:j]中只能保存一个,其余的需要删除;为了使删除代价最小,保留的字符代价应是cost[i:j]中最大的一个,即对s[i:j]去重的代价为sum(cost[i:j]) - max(cost[i:j]).遍历整个字符串将所有去重代价累计
class Solution:
def minCost(self, s: str, cost: List[int]) -> int:
s = list(s)
i = 0
j = 1
count=1#记录重复次数
cost_sum=0#去重所需代价
while i <len(s) and j <len(s):
if s[j]==s[i]:
j+=1
count +=1
else:
if count >=2:#同一个字符出现两次及以上需要去重
Sum = sum(cost[i:j]) - max(cost[i:j])
cost_sum += Sum
count = 1
i = j
j+=1
if count >=2: #最后一次去重
Sum = sum(cost[i:j]) - max(cost[i:j])
cost_sum += Sum
return cost_sum