LeetCode题目5509. 避免重复字母的最小删除成本

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

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值