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

本文主要是介绍【教3妹学编程-算法题】2914. 使二进制字符串变美丽的最少修改次数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

烦死了
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个,下一个子串减1minChangeCnt++;cntList.set(i + 1, nextCnt - 1);}}return minChangeCnt;}
}

这篇关于【教3妹学编程-算法题】2914. 使二进制字符串变美丽的最少修改次数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/342468

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键