【教3妹学编程-算法题】2914. 使二进制字符串变美丽的最少修改次数

news2024/7/6 17:48:55

烦死了
3妹:呜呜,烦死了, 脸上长了一个痘
2哥 : 不要在意这些细节嘛,不用管它,过两天自然不就好了。
3妹:切,你不懂,影响这两天的心情哇。
2哥 : 我看你是不急着找工作了啊, 工作那么辛苦,哪还有时间想这些啊。
3妹:说到找工作,我又要去刷题了。
2哥:我给你出一道关于美丽的题吧,让你的心情美丽美丽~

题目:

给你一个长度为偶数下标从 0 开始的二进制字符串 s 。

如果可以将一个字符串分割成一个或者更多满足以下条件的子字符串,那么我们称这个字符串是 美丽的 :

每个子字符串的长度都是 偶数 。
每个子字符串都 只 包含 1 或 只 包含 0 。
你可以将 s 中任一字符改成 0 或者 1 。

请你返回让字符串 s 美丽的 最少 字符修改次数。

示例 1:

输入:s = “1001”
输出:2
解释:我们将 s[1] 改为 1 ,且将 s[3] 改为 0 ,得到字符串 “1100” 。
字符串 “1100” 是美丽的,因为我们可以将它分割成 “11|00” 。
将字符串变美丽最少需要 2 次修改。
示例 2:

输入:s = “10”
输出:1
解释:我们将 s[1] 改为 1 ,得到字符串 “11” 。
字符串 “11” 是美丽的,因为它已经是美丽的。
将字符串变美丽最少需要 1 次修改。
示例 3:

输入:s = “0000”
输出:0
解释:不需要进行任何修改,字符串 “0000” 已经是美丽字符串。

提示:

2 <= s.length <= 10^5
s 的长度为偶数。
s[i] 要么是 ‘0’ ,要么是 ‘1’ 。

思路:

思考

1、压缩数据,列表每个元素都是连续0或1子串的长度。
2、对压缩列表相邻元素(子串长度)奇偶判断。

复杂度:
时间复杂度:
O(n),n为字符串s长度。
空间复杂度:
O(n),n为字符串s长度。

java代码:

class Solution {
    public int minChanges(String s) {
        // 1、压缩数据,列表每个元素都是连续0或1子串的长度
        List<Integer> cntList = new ArrayList<>();
        char preC = s.charAt(0);
        int cnt = 0;
        for (char c : s.toCharArray()) {
            // 和上一个字符比较,判断是否连续相同
            if (c == preC) {
                cnt++;
            } else {
                // 记录子串长度
                cntList.add(cnt);
                cnt = 1;
            }
            preC = c;
        }
        cntList.add(cnt);

        int minChangeCnt = 0;
        // 2、对压缩列表相邻元素(子串长度)奇偶判断
        for (int i = 0; i < cntList.size(); i++) {
            cnt = cntList.get(i);
            if (cnt % 2 == 0) {
                // 跳过偶数
                continue;
            }
            // 奇数,预取下一个
            int nextCnt = cntList.get(i + 1);
            if (nextCnt % 2 == 1) {
                // 下一个奇数,调整1个。例:{1,3}=>{2,2}
                minChangeCnt++;
                // 已调整,跳过下一个
                i++;
            } else {
                // 下一个是偶数,当前子串调整1个,下一个子串减1
                minChangeCnt++;
                cntList.set(i + 1, nextCnt - 1);
            }
        }
        return minChangeCnt;
    }
}

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

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

相关文章

计算两个时间之间连续的日期(java)

背景介绍 给出两个时间&#xff0c;希望算出两者之间连续的日期&#xff0c;比如时间A:2023-10-01 00:00:00 时间B:2023-11-30 23:59:59,期望得到的连续日期为2023-10-01、2023-10-02、… 2023-11-30 Java版代码示例 import java.time.temporal.ChronoUnit; import java.tim…

relectron框架——打包前端vue3、react为pc端exe可执行程序

文章目录 ⭐前言⭐搭建Electron打包环境&#x1f496; npm镜像调整&#x1f496; 初始化项目&#x1f496; 配置index.js ⭐打包vue3⭐打包react⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于使用electronjs打包前端vue3、react成exe可执行程序。…

SpringBoot热部署2023最新版IDEA详细步骤

1、在pom.xml中配置依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency>注意&#xff1a; 依赖放在标签里面 加入依赖后…

『亚马逊云科技产品测评』活动征文|占了个便宜,12个月的免费云服务器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 在群里看到有小伙伴说亚马逊可以免费试用服务器&#xff0c;这种好事不得…

Android 字体资源

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、 XML 中的字体四…

HTML5+CSS3+JS小实例:简约的黑色分页

实例:简约的黑色分页 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="…

Vue3问题:如何实现组件拖拽实时预览功能?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约3000字&#xff0c;整篇阅读大约需要5分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

Cgroups定义及验证

sudo lsb_release -a可以看到操作系统版本是20.04&#xff0c;sudo uname -r可以看到内核版本是5.4.0-156-generic。 Linux Cgroups 的全称是 Linux Control Group。它最主要的作用&#xff0c;就是限制一个进程组能够使用的资源上限&#xff0c;包括 CPU、内存、磁盘、网络带…

剑指JUC原理-9.Java无锁模型

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

[推荐]SpringBoot java实现文件/附件上传下载 服务器 数据库 拿来就用,简单实用

推荐一个思路非常简单又很实用的文件上传下载方式&#xff0c;代码十分简练&#xff0c;可以开箱即用&#xff0c;下面是使用到的一些工具类和业务代码&#xff1b; 1.文件上传实现 判断文件类型的工具类&#xff0c;一些使用到的实体类我会凡在文末&#xff0c;需要可以的自…

【Hydro】部分基流分割方法及程序代码说明

目录 说明一、数字滤波法单参数数字滤波Lyne-Hollick滤波法Chapman滤波法Chapman-Maxwell滤波法Boughton-Chapman滤波法 双参数滤波法Eckhardt滤波法 二、其他基流分割方法基流指数&#xff08;BFI&#xff09;法时间步长&#xff08;HYSEP&#xff09;法PART法加里宁-阿里巴扬…

【JAVA学习笔记】60 - 坦克大战1.0-绘图坐标体系、事件处理机制

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter16/src/com/yinhai 绘图坐标体系 一、基本介绍 下图说明了Java坐标系。坐标原点位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标&#xff0c;表示当前位置为…

Leetcode循环队列(数组实现及链表实现)

这道题十分考验我们对队列的理解。 文章目录 队列的介绍队列的实现进入正题数组的方法链表实现 队列的介绍 队列是一种只允许在一段进行插入&#xff0c;在另一端进行删除的数据操作的特殊线性结构&#xff0c;&#xff0c;因此决定了他具有先入先出的特点&#xff0c;其中进行…

2023软件测试高薪必备pytest-yaml 测试平台-1.新增项目和用例

前言 基于pytest-yaml-yoyo 框架写的接口测试平台&#xff0c;在web网页平台上维护yaml测试用例&#xff0c;执行用例&#xff0c;并查看allure报告。 pytest-yaml-yoyo 框架简介 https://gitee.com/yoyoketang/pytest-yaml-yoyo 本框架只需pip安装即可上手 pip install pyt…

C++类和对象万字详解(典藏版)

文章目录 前言认识类和对象使用 struct 定义类class 定义类类的声明和定义分离类大小的计算this指针this指针的常见的面试题 构造函数与构析函数构造函数初始化列表 构析函数默认生成的构造函数和构析函数 拷贝构造函数默认类型转化与 explicit 关键字 static 成员变量运算符重…

判断字符串是否为json

//营业时间返回数组String businessDate merchantInfoResp.getBusinessDate();Object obj JSON.parse(businessDate);if (obj instanceof JSONArray) {merchantInfoResp.setBusinessDateDesc(JSON.parseArray(JSON.toJSONString(obj), Integer.class));} else {//营业日期判断…

YB2408CAX系列是一款高效、高频的同步降压DC-DC转换器,最高可带载2A连续电流。

概述: YB2408CAX系列是一款高效、高频的同步降压DC-DC转换器&#xff0c;最高可带载2A连续电流。YB2408CAX系列可在2.7V到5.5V的宽输入电源电压下工作。内部的主开关和同步开关管的RoSO非常小&#xff0c;从而传导损耗很小&#xff0c;效率很高。该款芯片工作开关频率为1.5MHz…

向中学生郑重推荐电视剧《狂花凋落》

笔者为什么要向网友&#xff0c;特别是要向中学生网友&#xff0c;郑重推荐能真实反应当年“文革”时期知识青年上山下乡悲惨遭遇的电视剧《狂花凋落》&#xff0c;因为如果真的再来上一次那种亘古未有的人间浩劫&#xff0c;那么在蜜糖里泡大、丁点儿苦都吃不下的当今中学生&a…

操作系统备考学习 day12 (第五章)

操作系统备考学习 day12 第五章 &#xff08;输入/输出&#xff09;I/O管理5.1 I/O管理概述5.1.1 I/O设备I/O设备的分类 5.1.2 I/O控制器I/O设备的电子部件 5.1.3 I/O控制方式程序直接控制方式中断驱动方式DMA方式DMA控制器通道控制方式 5.1.4 I/O软件层次结构用户层软件设备独…