zoukankan      html  css  js  c++  java
  • LCP 19. 秋叶收藏集

    小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片黄叶。
    出于美观整齐的考虑,小扣想要将收藏集中树叶的排列调整成「红、黄、红」三部分。每部分树叶数量可以不相等,但均需大于等于 1。每次调整操作,小扣可以将一片红叶替换成黄叶或者将一片黄叶替换成红叶。请问小扣最少需要多少次调整操作才能将秋叶收藏集调整完毕。

    示例 1:

    输入:leaves = "rrryyyrryyyrr"

    输出:2

    解释:调整两次,将中间的两片红叶替换成黄叶,得到 "rrryyyyyyyyrr"

    示例 2:

    输入:leaves = "ryr"

    输出:0

    解释:已符合要求,不需要额外操作

    提示:

    3 <= leaves.length <= 10^5
    leaves 中只包含字符 'r' 和字符 'y'

    三个状态 三维动规

    class Solution:
        def minimumOperations(self, leaves: str) -> int:
            n=len(leaves)
            dp=[[0,0,0] for _ in range(n)]
            dp[0][0]=int(leaves[0]=='y')
            dp[0][1]=dp[0][2]=dp[1][2]=float('inf')
            for i in range(1,n):
                red=int(leaves[i]=='r')
                yellow=int(leaves[i]=='y')
                dp[i][0]=dp[i-1][0]+yellow
                dp[i][1]=min(dp[i-1][0],dp[i-1][1])+red
                if i>=2:dp[i][2]=min(dp[i-1][1],dp[i-1][2])+yellow
    
            return dp[n-1][2]
  • 相关阅读:
    链表
    链式学习法:提升技术深度
    数组
    写点什么
    7 天掌握算法面试必考知识点: 作业安排及如何提交
    创建Mac OS root账户
    正则表达式匹配及替换
    Xcode 10 之New Build System & Legacy Build System 旧版构建系统
    性能指标:TPS、QPS、RT、吞吐量
    Objective-C和Swift语言特性
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13758194.html
Copyright © 2011-2022 走看看