算法----使二进制字符串字符交替的最少反转次数

news2024/12/23 14:45:05

题目

给你一个二进制字符串 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 <= 105
s[i] 要么是 ‘0’ ,要么是 ‘1’ 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-number-of-flips-to-make-the-binary-string-alternating
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决思路

    fun minFlips(s: String): Int {
        //按照101010
        var count = 0
        for (i in s.toCharArray().indices){
            var char = getChar(i)
            if (s[i] != (char)){
                count++
            }
        }
        var result = count.coerceAtMost(s.length - count)


        val s2 = s + s
        for (i in s.indices){

            if (s2[i] != getChar(i)){
                count--
            }
            if (s2[i + s.length] != getChar(i + s.length)){
                count++
            }

            result = result.coerceAtMost(count.coerceAtMost(s.length - count))
        }
        return result
    }

    private fun getChar(i: Int) = if (i % 2 == 1) '0' else '1'

解决方法

1.按照 01 检测时需要修改的次数,用 len 减去就是按照 10 检测时修改的次数
2.类型 1 的操作,其实是头尾相接,但是先删除再添加操作开销太大,并且操作很麻烦
将字符串复制一份接在后面,即可使用滑动窗口丝滑拼接
3.滑窗时减去离开的格子,加上进来的格子,即可避免大量重复计算
答案就是滑窗过程中出现的最小修改次数

在这里插入图片描述
参考:https://leetcode.cn/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/solution/minimum-number-of-flips-by-ikaruga-lu32/

总结

1.好多天没有做了 真的太懒了
2.程序员做一天是一天在这里插入图片描述
3.真是:聪明人有聪明人的活法 不聪明的难道就不能活了吗?
一天可以做10道题 也可以10天做一道题
龟兔赛跑 看似是小孩子的故事,却蕴含着大道理啊
多少成年人能懂啊 家人们

杂记

    //这题有点难啊 上来就没思路
    //我怎么知道要操作几次操作1 几次操作二最少呢????
    //暴力破解的话 也不是不可以

    //就好像做了一道数学题
    //思路不清晰 不明确
    //看别人写的 真的是很清晰
    //我的思维能力 思考能力不行吗????


    // 1.转换成0101 和 1010 需要的次数关系
    //小算法计算
    //woca 几天下来 都忘了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

django框架-2

创建项目 创建项目文件夹创建项目 django-admin startproject BaseDjangoProject 创建应用 python manage.py startapp goods settings.py 在最后面添加上应用goods INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contr…

Java字符串中字符的Unicode码点、编码

以前对于Java字符串中字符的Unicode码点、UTF编码没有仔细研究。今天研究了下。 Unicode是一个字符集&#xff0c;其实是一个映射&#xff0c;给每个字符映射了一个数值&#xff0c;称为码点&#xff08;Code Point&#xff09;。 而UTF-8、UTF-16、UTF-32则是对Unicode码点的转…

shiro反序列化漏洞

Shiro简述 Shiro 是 Java 的一个安全框架&#xff0c;执行身份验证、授权、密码、会话管理shiro默认使用了CookieRememberMeManager&#xff0c;其处理cookie的流程是&#xff1a;得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化 然而AES的密钥是硬编码…

今日分享:ai绘画工具

凯蒂是一位充满梦想和热情的年轻女孩。她从小就对艺术充满了浓厚的兴趣&#xff0c;尤其痴迷于绘画。然而&#xff0c;她一直感到自己的绘画技巧有限&#xff0c;无法将内心的想象力完美地呈现在画布上。她渴望找到一种方法来提升自己的创作能力&#xff0c;实现内心的艺术梦想…

ModaHub魔搭社区:详解向量数据库Milvus的Mishards:集群分片中间件(一)

目录 Mishards&#xff1a;集群分片中间件 Mishards 是什么 Mishards 简单工作原理 Mishards 目标场景 基于 Mishards 的集群方案 总体架构 主要构件 Mishards 配置 全局配置 Mishards&#xff1a;集群分片中间件 Mishards 是什么 Mishards 是一个用 Python 开发的 …

2020年全国硕士研究生入学统一考试管理类专业学位联考数学试题——纯题目版

2020 级考研管理类联考数学真题 一、问题求解&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。 1、某产品去年涨价 10%&#xf…

野蛮扩张结束,研发效能提升这场“仗”如何布局?

引言 从第一块石头被打磨成石器&#xff0c;到青铜铸造术被发明&#xff1b;从蒸汽机的改良与广泛应用&#xff0c;到交流电和发电机的问世&#xff0c;纵观人类发展史&#xff0c;人类文明的发展始终依托于生产力与生产效率的不断提升。 身处软件“吞噬”世界的数字化时代&am…

【软考网络管理员】2023年软考网管初级常见知识考点(28)-系统开发和项目管理

涉及知识点 软件生命周期&#xff0c;软件生命周期概念&#xff0c;软件开发模型&#xff0c;瀑布模型&#xff0c;演化、增量模型&#xff0c;喷泉模型&#xff0c;程序控制结构&#xff0c;控制结构种类&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络…

jmeter之对常数吞吐量定时器的理解与使用

详细看这个文章&#xff1a;jmeter之对吞吐量定时器的理解与使用_常数吞吐量定时器_xiaokanfuchen86的博客-CSDN博客 下面是我自己的进行的一点补充&#xff1a;如下图&#xff0c;两个请求中&#xff0c;一个下买单一个下卖单&#xff0c;在【下买单-buy】请求下的常数吞吐量…

略读 # SourcererCC: Scaling Code Clone Detection to Big Code

《SourcererCC: Scaling Code Clone Detection to Big Code》代码克隆检测基线方法之一&#xff1b; ABSTRACT 面向的问题&#xff1a;代码克隆检测在海量源码的场景下的扩展性问题&#xff1b; 提出的解决方案&#xff1a;SourcererCC&#xff0c;a token-based clone detec…

Java面试题【1】

Java面试题 文章目录 Java面试题Java基础以及api程序题1.下面sum的值是&#xff08; D &#xff09;2.下面程序的运行结果&#xff08; A &#xff09;3.若x是float类型变量&#xff0c;x10/4; 则x的值是&#xff08; B &#xff09;4.以下程序的输出结果是&#xff08;x 99 , …

Redis 缓存数据库双写不一致怎么处理?

一、概述&#xff1a; Redis 缓存数据库可能会出现双写不一致的情况&#xff0c;这是因为在进行缓存更新时&#xff0c;同时有多个线程或进程对同一个缓存键进行读写操作&#xff0c;导致了数据的不一致性。 具体来说&#xff0c;假设有两个线程 A 和 B 都要对同一个缓存键进…

【C语言】常用的字符串函数使用 模拟实现

前言字符串的组成 strlen模拟实现stlen strcpy模拟实现strcpy strcmp模拟实现strcmp strcat模拟实现strcat 前言 在使用下面介绍的库函数时声明以下头文件 #include <string.h>字符串的组成 如下字符数组 str 看似只包含abcde五个字符&#xff0c;实际上由6个字符组成…

随着人工智能时代的到来,算力需求的成倍增长成为新的趋势

方向一&#xff1a;AI与算力相辅相成 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是新一轮科技革命和产业变革的重要驱动力量。…

python 时间操作

写代码的时候&#xff0c;我建议还是要使用准确的时间刊一下这个结果&#xff0c;然后再减去开始的计数操作 我之前的操作是 time package from time import sleep from time import time import sys t0 time() sleep(3) t1 time()print(" cost {} s".format(…

如何使用Fiddler对手机进行弱网测试?(干货教程)

1.首先&#xff0c;fiddler连接手机 1)Tools->Options->Connections->设置端口8888&#xff0c;勾选Allow remote computers to connect 2)配置手机 注&#xff1a;手机和电脑需要在同一局域网下 手机进入网络详情&#xff0c;将代理改为手动 设置主机名、端口 主机…

python 多任务详解

1、线程① 函数方式创建线程② 自定义类创建线程 2、队列① 普通队列 Queue② 堆栈 LifoQueue③ 优先级 PriorityQueue 3、互斥锁4、进程① 函数方式创建进程② 类方式创建进程③ 进程中的队列④ 进程间通信 5、 线程与进程区别① 线程共享全局变量&#xff0c;进程不共享② 所…

Tomcat部署相关问题汇总

一.Jar包冲突 由于项目当中依赖了一些框架&#xff0c;而这些框架无法直接修改时&#xff0c;就直接本地代码写了一个同名同包路径的类&#xff0c;可以直接覆盖框架的类,但是心里不免有疑问&#xff0c;为啥本地写的同名同路径的类&#xff0c;可以覆盖三方框架的类呢&#x…

分层解耦相关知识点

这里写目录标题 三层架构简介具体案例原始代码DAO层代码service层controller层总结 分层解耦思想IOC&DI 入门简介控制反转依赖注入 IOC详解详细种类 DI详解 三层架构 简介 具体案例 原始代码 DAO层代码 分别是一个接口实现类以及一个接口&#xff0c;用接口是为了提高程…

Python pyqt5 qss美化窗口

效果 QSS QWidget#widget{background-color:#eef0f6;border-left:0.5px solid lightgray;border-right:0.5px solid lightgray;border-top:0.5px solid lightgray;border-bottom:0.5px solid #e5e5e5;border-top-left-radius: 5px;border-top-right-radius: 5px;}QWidget#widge…