0
点赞
收藏
分享

微信扫一扫

Python描述 LeetCode 926. 将字符串翻转到单调递增


Python描述 LeetCode 926. 将字符串翻转到单调递增

  大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~

  如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.

Python描述 LeetCode 926. 将字符串翻转到单调递增_公众号

本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。

题目

如果一个二进制字符串,是以一些 ​​0​​​(可能没有 ​​0​​​)后面跟着一些 ​​1​​​(也可能没有 ​​1​​)的形式组成的,那么该字符串是 单调递增 的。

给你一个二进制字符串 ​​s​​​,你可以将任何 ​​0​​​ 翻转为 ​​1​​​ 或者将 ​​1​​​ 翻转为 ​​0​​ 。

返回使 ​​s​​ 单调递增的最小翻转次数。

示例 1:

输入:s = "00110"
输出:1
解释:翻转最后一位得到 00111.

示例 2:

输入:s = "010110"
输出:2
解释:翻转得到 011111,或者是 000111。

示例 3:

输入:s = "00011000"
输出:2
解释:翻转得到 00000000。

提示:

  • ​1 <= s.length <= 105​
  • ​s[i]​​​ 为​​'0'​​​ 或​​'1'​

解题思路

前缀和。记录前i个中1的数量,那么len(S)-i中0的数量则为​​len(S)-i-(tmp[-1]-tmp[i])​​,以i为分割,需要将前面的1换为0,后面的0换成1,取最小值即可

Python描述

class Solution(object):
def minFlipsMonoIncr(self, S):
# 前缀和,tmp[i]表示S[0:i]中1的个数,S[i:]中0的个数为len(S)-i-(tmp[-1]-tmp[i])
tmp = [0]
for item in S:
tmp.append(tmp[-1] + int(item))
res = len(S)
# 以i为分割,左边为0,右面为1
for i in range(len(tmp)):
# 以当前为分割的代价
cost = tmp[i] + len(S)-i-(tmp[-1]-tmp[i])
res = min(cost,res)
return


举报

相关推荐

0 条评论