LeetCode 1888 使二进制字符串交替的最少翻转次数
LeetCode 1888 使二进制字符串交替的最少翻转次数题目描述给你一个二进制字符串s你可以进行两种操作翻转任意一个字符0 变 11 变 0。将字符串的第一个字符移动到末尾即旋转。你可以任意次旋转然后进行若干次翻转使得最终的字符串变成交替字符串即相邻字符都不相同。求最少翻转次数。解题思路交替字符串的两种模式长度为n的交替字符串只有两种可能模式0以0开头偶数下标0,2,4,…为0奇数下标为1。模式1以1开头偶数下标为1奇数下标为0。对于任意一个固定的字符串我们可以统计偶数位置上0的个数和奇数位置上0的个数然后利用总数推导出与两种模式匹配所需翻转次数偶数位置总数 n - n/2向上取整奇数位置总数 n/2向下取整。与模式0匹配的翻转次数 (偶数位置总数 - 偶数位0的个数) 奇数位0的个数 (n - n/2 - even0) odd0。与模式1匹配的翻转次数 偶数位0的个数 (奇数位置总数 - 奇数位0的个数) even0 (n/2 - odd0)。取两者较小值即为当前字符串的最小翻转次数。旋转的影响旋转操作会使字符串的索引发生变化每旋转一次原第一个字符移到最后其余字符的索引减 1。这会导致原本在偶数位置的字符变成奇数位置反之亦然除了移到末尾的那个字符。因此如果我们能维护当前字符串中偶数位置和奇数位置上0的个数就可以通过模拟旋转过程计算出所有旋转情况下的最少翻转次数。核心算法先统计原始字符串中偶数下标和奇数下标上0的个数even0和odd0。初始化答案为n最大可能值。循环n次模拟每次旋转后的状态更新移除当前第一个字符原字符串的第i个字符它在当前字符串中位于下标 0。如果该字符是0则even0--因为下标 0 是偶数。剩余字符的索引全部减 1奇偶性互换交换odd0和even0。把刚才移除的字符放到末尾它现在位于下标n-1。如果该字符是0根据n-1的奇偶性增加对应的计数n-1为偶数则even0否则odd0。利用当前的even0和odd0计算两种模式的最小翻转次数更新答案。返回答案。代码实现CclassSolution{public:intminFlips(string s){intns.length();inteven00,odd00;// 原始字符串中偶数下标、奇数下标上 0 的个数for(inti0;in;i){if(s[i]0){if(i1)odd0;// 奇数下标elseeven0;// 偶数下标}}intansn;// 初始化答案为最大值 nfor(inti0;in;i){// 1. 移除第一个字符下标 0if(s[i]0)even0--;// 2. 剩余字符索引减1奇偶互换swap(odd0,even0);// 3. 把移出的字符放到末尾下标 n-1if(s[i]0){if((n-1)1)odd0;// n-1 为奇数elseeven0;// n-1 为偶数}// 计算当前旋转后的字符串所需最少翻转次数// 偶数位置总数 n - n/2奇数位置总数 n/2intflipsmin(even0n/2-odd0,odd0n-n/2-even0);ansmin(ans,flips);}returnans;// ans 一定非负直接返回}};复杂度分析时间复杂度O(n)只需一次遍历和一次循环没有额外嵌套。空间复杂度O(1)只使用了常数个变量。总结本题的关键在于理解旋转对字符奇偶位置的影响通过维护偶数位和奇数位上0的个数可以 O(n) 时间内求出所有旋转情况的最少翻转次数。这种模拟旋转并动态更新计数的方法避免了显式地旋转字符串非常高效。扩展如果题目要求输出最少翻转次数对应的具体旋转次数也可以在此算法基础上记录。

相关新闻

收藏 | AI新手/程序员必看:轻松入门大模型与AI Agents,开启智能新篇章!

收藏 | AI新手/程序员必看:轻松入门大模型与AI Agents,开启智能新篇章!

大型语言模型(LLM)虽在自然语言处理上表现出色,但仍有语义理解、数据偏见和计算资源需求等局限。AI Agents作为结合LLM及其他技术的综合智能体,具备自主感知、思考和行动能力,是实现人工通用智能(AGI&#…

2026/5/17 9:29:10 阅读更多 →
基于Java springboot高校洗浴预约管理系统(源码+文档+运行视频+讲解视频)

基于Java springboot高校洗浴预约管理系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 高校洗浴预约管理系统是提升学生生活品质的重要举措。基于Java Spring Boot框架开发的洗浴预约管理…

2026/5/17 9:29:09 阅读更多 →
基于Java Swing + MySQL的学生住宿管理系统的设计与实现

基于Java Swing + MySQL的学生住宿管理系统的设计与实现

本项目是数据库课程的结课项目,基于JavaSwing MySQL实现的学生住宿管理系统,系统开发较完善,不仅实现了对数据库的基本增删改查,同时拥有对数据库信息进行统计并生成报表的功能,下面让我们来详细了解一下:…

2026/7/4 12:37:31 阅读更多 →

最新新闻

SSDTTime终极指南:如何用一键工具快速解决硬件兼容性问题

SSDTTime终极指南:如何用一键工具快速解决硬件兼容性问题

SSDTTime终极指南:如何用一键工具快速解决硬件兼容性问题 【免费下载链接】SSDTTime SSDT/DSDT hotpatch attempts. 项目地址: https://gitcode.com/gh_mirrors/ss/SSDTTime SSDTTime是一款强大的SSDT生成工具,专门用于硬件兼容性优化和跨平台系统…

2026/7/5 14:44:23 阅读更多 →
OneNote专业迁移指南:终极免费工具助你无损转换到Markdown

OneNote专业迁移指南:终极免费工具助你无损转换到Markdown

OneNote专业迁移指南:终极免费工具助你无损转换到Markdown 【免费下载链接】onenote-md-exporter ConsoleApp to export OneNote notebooks to Markdown formats 项目地址: https://gitcode.com/gh_mirrors/on/onenote-md-exporter 你是否厌倦了微软OneNote的…

2026/7/5 14:42:23 阅读更多 →
Text-to-CAD革命:用自然语言重构机械设计工作流

Text-to-CAD革命:用自然语言重构机械设计工作流

Text-to-CAD革命:用自然语言重构机械设计工作流 【免费下载链接】text-to-cad-ui A lightweight UI for interacting with the Zoo Text-to-CAD API. 项目地址: https://gitcode.com/gh_mirrors/te/text-to-cad-ui 传统机械设计流程中,工程师需要…

2026/7/5 14:38:22 阅读更多 →
GIF图像使用的压缩算法是LZW(Lempel-Ziv-Welch)算法

GIF图像使用的压缩算法是LZW(Lempel-Ziv-Welch)算法

GIF图像使用的压缩算法是LZW(Lempel-Ziv-Welch)算法。这是一种无损数据压缩算法,专为重复模式较多的图像(如图形、图标、文字等)设计,适用于GIF格式的8位调色板图像。LZW在GIF规范(GIF87a和GIF8…

2026/7/5 14:38:22 阅读更多 →
Realtek RTL8125 2.5GbE网卡驱动:DKMS安装与优化完整指南

Realtek RTL8125 2.5GbE网卡驱动:DKMS安装与优化完整指南

Realtek RTL8125 2.5GbE网卡驱动:DKMS安装与优化完整指南 【免费下载链接】realtek-r8125-dkms A DKMS package for easy use of Realtek r8125 driver, which supports 2.5 GbE. 项目地址: https://gitcode.com/gh_mirrors/re/realtek-r8125-dkms Realtek R…

2026/7/5 14:38:22 阅读更多 →
Python练习题002篇

Python练习题002篇

文章目录 模块一:布尔类型与比较运算符 练习题 模块二:基本if单分支选择结构 练习题 模块三:if-else双分支选择结构 练习题 模块四:逻辑运算符(and / or / not) 练习题 模块五:多重if(elif)多分支选择结构 练习题 模块六:嵌套if选择结构 练习题 综合练习题(侧重Linu…

2026/7/5 14:36:22 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻