LeetCode——1888. 使二进制字符串字符交替的最少反转次数(Minimum Number of Flips to Make the Binary ...)[中等]——分析及代码(Java)
LeetCode——1888. 使二进制字符串字符交替的最少反转次数[Minimum Number of Flips to Make the Binary String Alternating][中等]——分析及代码[Java]
- 一、题目
- 二、分析及代码
- 1. 滑动窗口
- (1)思路
- (2)代码
- (3)结果
- 三、其他
一、题目
给你一个二进制字符串 s 。你可以按任意顺序执行以下两种操作任意次:
- 类型 1 :删除 字符串 s 的第一个字符并将它 添加 到字符串结尾。
- 类型 2 :选择 字符串 s 中任意一个字符并将该字符 反转 ,也就是如果值为 ‘0’ ,则反转得到 ‘1’ ,反之亦然。
请你返回使 s 变成 交替 字符串的前提下, 类型 2 的 最少 操作次数 。
我们称一个字符串是 交替 的,需要满足任意相邻字符都不同。
- 比方说,字符串 “010” 和 “1010” 都是交替的,但是字符串 “0100” 不是。
示例 1:
输入:s = "111000"
输出:2
解释:执行第一种操作两次,得到 s = "100011" 。
然后对第三个和第六个字符执行第二种操作,得到 s = "101010" 。
示例 2:
输入:s = "010"
输出:0
解释:字符串已经是交替的。
示例 3:
输入:s = "1110"
输出:1
解释:对第二个字符执行第二种操作,得到 s = "1010" 。
提示:
- 1 <= s.length <= 10^5
- s[i] 要么是 ‘0’ ,要么是 ‘1’ 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、分析及代码
1. 滑动窗口
(1)思路
对操作 1,将第一个字符移动到字符串结尾,等效于先将 s 首尾相接构造一个长度为 2 * len 的字符串,再通过长度为 len 的滑动窗口取最小值。
因为最终得到的交替字符串只可能是 “0101010…” 或 “1010101…” 2 种情况,对这 2 种状态分别求解所需的操作次数即可。
(2)代码
class Solution {public int minFlips(String s) {String ss = s + s;//先将s首尾相接构造一个长度为2*len的字符串,再通过长度为len的滑动窗口取最小值char[] str = ss.toCharArray();int len = s.length(), n = str.length, ans = Integer.MAX_VALUE;int[] op1 = new int[n + 1], op2 = new int[n + 1];//op1[i]、op2[i]表示构造得到"01010..."和"10101..."前i位的操作次数op1[0] = 0;op2[0] = 0;for (int i = 0; i < n; i++) {if ((i & 1) == (int)(str[i] - '0')) {//奇数位为1或偶数位为0op1[i + 1] = op1[i];op2[i + 1] = op2[i] + 1;} else {//奇数位为0或偶数位为1op1[i + 1] = op1[i] + 1;op2[i + 1] = op2[i];}}for (int i = len; i <= n; i++) {//移动长度为len的滑动窗口,取最小操作次数ans = Math.min(ans, op1[i] - op1[i - len]);ans = Math.min(ans, op2[i] - op2[i - len]);}return ans;}
}
(3)结果
执行用时 :19 ms,在所有 Java 提交中击败了 82.13% 的用户;
内存消耗 :41.6 MB,在所有 Java 提交中击败了 20.17% 的用户。
三、其他
暂无。
LeetCode——1888. 使二进制字符串字符交替的最少反转次数(Minimum Number of Flips to Make the Binary ...)[中等]——分析及代码(Java)相关推荐
- LeetCode——1849. 将字符串拆分为递减的连续值(Splitting a String Into Descending Consecutive Val..)[中等]——分析及代码(Java)
LeetCode--1849. 将字符串拆分为递减的连续值[Splitting a String Into Descending Consecutive Values][中等]--分析及代码[Java ...
- LeetCode——1871. 跳跃游戏 VII(Jump Game VII)[中等]——分析及代码(Java)
LeetCode--1871. 跳跃游戏 VII[Jump Game VII][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 + 队列 (1)思路 (2)代码 (3)结果 ...
- LeetCode——1143. 最长公共子序列(Longest Common Subsequence)[中等]——分析及代码(Java)
LeetCode--1143. 最长公共子序列[Longest Common Subsequence][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 (1)思路 (2)代 ...
- LeetCode——1947. 最大兼容性评分和(Maximum Compatibility Score Sum)[中等]——分析及代码(Java)
LeetCode--1947. 最大兼容性评分和[Maximum Compatibility Score Sum][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 状态压缩 + 动态 ...
- LeetCode——1846. 减小和重新排列数组后的最大元素(Maximum Element After Decreasing and Rearranging)[中等]——分析及代码(Java)
LeetCode--1846. 减小和重新排列数组后的最大元素[Maximum Element After Decreasing and Rearranging][中等]--分析及代码[Java] 一 ...
- LeetCode——909. 蛇梯棋(Snakes and Ladders)[中等]——分析及代码(Java)
LeetCode--909. 蛇梯棋[Snakes and Ladders][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 广度优先搜索 (1)思路 (2)代码 (3)结果 三.其 ...
- LeetCode—5757. 矩阵中最大的三个菱形和(Get Biggest ...)[中等]—分析及代码(Java)
LeetCode--5757. 矩阵中最大的三个菱形和[Get Biggest Three Rhombus Sums in a Grid][中等]--分析及代码[Java] 一.题目 二.分析及代码 ...
- LeetCode——1834. 单线程 CPU(Single-Threaded CPU)[中等]——分析及代码(Java)
LeetCode--1834. 单线程 CPU[Single-Threaded CPU][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 优先队列 (1)思路 (2)代码 (3)结果 ...
- LeetCode——1104. 二叉树寻路(Path In Zigzag Labelled Binary Tree)[中等]——分析及代码(Java)
LeetCode--1104. 二叉树寻路[Path In Zigzag Labelled Binary Tree][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 按位置求解 (1 ...
最新文章
- python官网下载步骤64位-Python 3.7 64位下载
- java编程赋值运算符_跟我学java编程—简单赋值运算符“=”
- quad8是matlab中调用那个,Matlab 数值积分
- [css] 有哪些标签是不支持伪元素的?
- Finding Gems
- 【物理总结】初中物理重要常数、单位换算、概念、规律和理论及知识的应用归纳大全梳理总结...
- Struts 2框架创建的第一个项目
- java jsr305_java – 为什么我需要添加神器JSR305才能使用Guava 14?
- Java中利用package机制实现条件编译
- 吞食天地2重制版巫妖王panny版存档_11年前的冷饭—Nintendo 任天堂 Switch《宵星传奇 重制版》评测...
- JAVA / JS 中关于this和that
- WordCloud 中英文词云图绘制,看这一篇就够了
- uniapp连接本地服务器请求超时
- 求圆和直线之间的交点
- 麻姑山行,记南城麻姑山一日游
- csapp-buflab
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- python+pysimplegui+socket开发登录聊天室
- Oracle联立多个表建视图,一个简单的联立方程组模型让你了解内外生变量、如何识别以及2SLS估计步骤...
- 计算机网络——概述(1)
热门文章
- PPT制作技巧汇总之动画设置与播放(office 2007)
- AirServer最新Win64位个人版投屏软件
- CHROME扩展笔记之设置代理(项目完成再上完整案例)
- 【OpenGL】笔记三、着色器
- ubuntu设置共享文件夹成功后却不显示找不到
- C#精挑整理知识要点11 委托和事件(建议收藏)
- 2017年美亚杯资格赛 个人赛 writeup
- 智能云时代,谁来守护我们的安全?
- 报时功能_厦门宝藏 | 海关大钟悠扬的鸣曲报时,承载着老厦门人无数的记忆!...
- DTOJ #5981