LeetCode 926. 将字符串翻转到单调递增(动态规划)
文章目录
- 1. 题目
- 2. 解题
1. 题目
如果一个由 '0' 和 '1'
组成的字符串,是以一些 '0'
(可能没有 '0'
)后面跟着一些 '1'
(也可能没有 '1'
)的形式组成的,那么该字符串是单调递增的。
我们给出一个由字符 '0' 和 '1'
组成的字符串 S,我们可以将任何 '0'
翻转为 '1'
或者将 '1'
翻转为 '0'
。
返回使 S 单调递增的最小翻转次数。
示例 1:
输入:"00110"
输出:1
解释:我们翻转最后一位得到 00111.示例 2:
输入:"010110"
输出:2
解释:我们翻转得到 011111,或者是 000111。示例 3:
输入:"00011000"
输出:2
解释:我们翻转得到 00000000。提示:
1 <= S.length <= 20000
S 中只包含字符 '0' 和 '1'
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flip-string-to-monotone-increasing
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 动态规划,
dp0[i]
表示在相应字符处以0结束的最小翻转次数 dp1[i]
表示在相应字符处以1结束的最小翻转次数- 注意预处理得到前缀 1 的个数,见注释
class Solution {public:int minFlipsMonoIncr(string S) {int n = S.size();vector<int> one(n);for(int i = 0; i < n; ++i)one[i] = (i > 0 ? one[i-1] : 0) + (S[i]=='1');// 前缀 1 的个数vector<int> dp0(n+1, n), dp1(n+1, n);// dp0[i] 表示 以 0 结束递增的最小翻转次数// dp1[i] 表示 以 1 结束递增的最小翻转次数dp0[0] = dp1[0] = 0;for(int i = 0; i < n; ++i){if(S[i] == '0')//当前是0{dp0[i+1] = min((i > 0 ? one[i-1] : 0), dp0[i]);//以0结束 , 把前面的 1 都翻过来 or 前面以0结束dp1[i+1] = min(dp0[i], dp1[i])+1;//以1结束, 前面以0或1结束都可以,再把当前0翻转为1,+1}else//当前是 1{dp0[i+1] = min((i > 0 ? one[i-1] : 0), dp0[i])+1;//以0结束 , 把前面的 1 都翻过来 or 前面以0结束, 再把当前1翻转为0,+1dp1[i+1] = min(dp0[i], dp1[i]);//以1结束, 前面以0或1结束都可以,}}return min(dp0[n], dp1[n]);}
};
12 ms 9.1 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 926. 将字符串翻转到单调递增(动态规划)相关推荐
- leetcode 926. Flip String to Monotone Increasing | 926. 将字符串翻转到单调递增(前缀和)
题目 https://leetcode.com/problems/flip-string-to-monotone-increasing/ 题解 方法1:前缀和 class Solution {publ ...
- LeetCode926. 将字符串翻转到单调递增
如果一个二进制字符串,是以一些 0(可能没有 0)后面跟着一些 1(也可能没有 1)的形式组成的,那么该字符串是 单调递增 的. 给你一个二进制字符串 s,你可以将任何 0 翻转为 1 或者将 1 翻 ...
- LeetCode 85. 最大矩形(DP/单调递增栈,难)
文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调递增栈 1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [[" ...
- leetcode(力扣)738. 单调递增的数字||714. 买卖股票的最佳时机含手续费
738. 单调递增的数字 class Solution { public:int monotoneIncreasingDigits(int n) {string strNum=to_string(n) ...
- leetcode 738. Monotone Increasing Digits | 738. 单调递增的数字(Java)
题目 https://leetcode.com/problems/monotone-increasing-digits/ 题解 先把 num 的每一位转化为数组. 从左往右找第一个 前>后 的位 ...
- LeetCode 738. 单调递增的数字(贪心)
1. 题目 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称 ...
- LeetCode 84. 柱状图中最大的矩形(单调递增栈)
文章目录 1. 题目 2. 解题 1. 题目 题目链接 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是 ...
- leetcode第738题单调递增的数字
leetcode第738题单调递增的数字 **贪心:**这个题目贪心的思路我是真找不见,和贪心相关联的地方在哪里呢? class Solution {public int monotoneIncrea ...
- 代码随想录算法训练营第08天 | LeetCode 344.反转字符串,541. 反转字符串2,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串
LeetCode [344. 反转字符串] 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...
最新文章
- Windows远程连接的实现
- win 2008 控制共享文件夹大小_win10如何一键网络共享
- 彻底解决网络爬虫遇到的中文乱码问题
- 出租WiFi到底靠不靠谱?
- .NET Core on K8S 学习与实践系列文章索引 (更新至20191126)
- 个人博客建站方案推荐
- 平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术
- HDFC的完整形式是什么?
- win7重置密码的方法
- linux合并第一列相同的行,linux – 合并重复的行并在最后添加“N / A...
- HTML_DOM的node屬性
- 启用nf_conntrack模块,避免table full dropping
- 100个C语言经典小程序和C语言编写的小游戏
- 隐私问题不想用自己手机收验证码怎么办?
- c语言判断一个数是否是素数
- FPS 游戏飞天遁地原理
- 电脑ping,怎么ping网速,详细教您ping网络的方法
- Kubernetes PV与PVC
- Acdream 1424 Diversion 树链剖分+线段树
- 众海世纪影业:五一档19部影片“扎堆”,能否再次掀起观影热潮?
热门文章
- 利用dft的定义计算dft的matlab程序_CP2K教程系列之静态计算(Pymatflow篇)
- matlab穆尔,基于matlab(矩阵实验室)的倒立摆控制系统仿真(34页)-原创力文档
- java递归空瓶换饮料_问题描述:一次买n瓶可乐,k个空瓶可以换一瓶饮料,那么一共能喝多少瓶饮料? | 学步园...
- less is more,so 只记 less
- VisualStudioAddIn2017.vsix的下载安装和使用
- 假期第一次编程总结(改二)
- CCCC L1-002. 打印沙漏【图形打印】
- NodeJs实现下载Excel文件
- linux-0.11内核 调试教程+GCC源代码
- windows phone7 学习笔记14——地理位置服务与反应性扩展框架