[Leetcode] 每日两题 838 1529 -day94

838. 推多米诺

可以通过模拟来做,每次遍历 替换某些点,直到一次遍历之后没有元素被替换

但是通过双指针来做更快

'R......R' => 'RRRRRRRR'
'R......L' => 'RRRRLLLL' or 'RRRR.LLLL'
'L......R' => 'L......R'
'L......L' => 'LLLLLLLL'

class Solution:
    def pushDominoes(self, dominoes: str) -> str:
        dominoes = 'L'+dominoes+'R'
        n = len(dominoes)
        res = []
        left = 0
        for right in range(1,n):
            if dominoes[right] == '.':
                continue
            mid = right - left - 1
            if left:
                res.append(dominoes[left])
            if dominoes[left] == dominoes[right]:
                res.append(dominoes[left] * mid)
            elif dominoes[left] == 'L' and dominoes[right] == 'R':
                res.append('.' * mid)
            else:
                res.append('R' * (mid // 2) + '.' * (mid % 2) + 'L' * (mid // 2))
            left = right
        return "".join(res)


1529. 最少的后缀翻转次数

由于每次翻转是由某一位到最后所有的元素都翻转,

所以可以从头开始比较 若最开始相同 那么则要翻转一次,

然后依次判断其下一位元素是否相同,若不相同,则下次需要将其翻转回来

按照此方法从左到右依次翻转过去

class Solution:
    def minFlips(self, target: str) -> int:
        res =int(target[0])
        for i in range(len(target)-1):
            if target[i] !=target[i+1]:
                res+=1
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值