当前位置: 首页 > news >正文

LC926. 将字符串翻转到单调递增(JAVA - 动态规划)

将字符串翻转到单调递增

  • 题目描述
    • 动态规划

题目描述

难度 - 中等
LC926. 将字符串翻转到单调递增(JAVA - 动态规划)

如果一个二进制字符串,是以一些 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 <= 10^5
s[i] 为 ‘0’ 或 ‘1’

在这里插入图片描述

动态规划

单调递增的字符串满足以下性质:
1.首个字符是 0 或 1;
2.其余的每个字符,字符 0 前面的相邻字符一定是 0,字符 1 前面的相邻字符可以是 0 或 1。

我们用动态规划去解答这个题时,每个位置我们都要考虑,其变成0或者1,的情况,最后我们取改变最小的值,

当 1≤i<n 时,考虑下标 i 处的字符。如果下标 i 处的字符是 0,则只有当下标 i−1 处的字符是 0 时才符合单调递增;如果下标 i 处的字符是 1,则下标 i−1 处的字符是 0 或 1 都符合单调递增,此时为了将翻转次数最小化,应分别考虑下标 i−1 处的字符是 0 和 1 的情况下需要的翻转次数,取两者的最小值。

代码演示:

class Solution {public int minFlipsMonoIncr(String s) {int n = s.length();int dp0 = 0;int dp1 = 1;for(int i = 0; i < n;i++){char c = s.charAt(i);int newDp0 = dp0;int newDp1 = Math.min(dp0,dp1);if(c == '1'){newDp0++;}else{newDp1++;}dp0 = newDp0;dp1 = newDp1;}return Math.min(dp0,dp1);}}
http://www.lryc.cn/news/175824.html

相关文章:

  • 【高阶数据结构】哈希的应用 {位图;std::bitset;位图的应用;布隆过滤器;布隆过滤器的应用}
  • 金融生产存储亚健康治理:升级亚健康 3.0 ,应对万盘规模的挑战
  • C语言自定义类型讲解:结构体,枚举,联合(2)
  • AI编程助手 Amazon CodeWhisperer 全面解析与实践
  • 利用EXCEL进行XXE攻击
  • 芯片验证就是一次旅行
  • Java深入理解线程的三大特性
  • 2025快手校招面试真题汇总及其解答(二)
  • PHP生成带中文的图片
  • java框架-Dubbo
  • Vue+iview 组件中通过v-for循环动态生成form表单进行表单校验
  • sns.load_dataset(“iris“)报错原因探究+解决办法
  • python回文素数
  • 纽扣电池16CRF1700.15,16CFR1700.20,ANSI C18.3M如何申请?
  • 10.12广州见 | 第十六届智慧城市大会报名通道全面开启
  • 2023-油猴(Tampermonkey)脚本推荐
  • 某度sign参数逆向
  • 【选型】JAVA生成PPT及选型
  • LPA*算法图文详解
  • 【Unity的HDRP渲染管线下实现好用的GUI模糊和外描边流光效果_Blur_OutLine_案例分享(内附源码)】
  • 电脑D盘格式化会有什么影响?电脑D盘格式化了怎么恢复数据
  • 【Spring】多环境切换
  • python经典百题之求10000之内的素数
  • ROS2 从头开始:第 5 部分 - 并发、执行器和回调组
  • 笔试强训Day3
  • 软考软件设计师-存储管理-文件管理-计算机网络(中
  • Vue3的学习
  • 什么是Peppol ID?如何创建?
  • Spring注解大揭秘:@Component、@Service、@Repository详解
  • Innodb底层原理与Mysql日志机制