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

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

时间:2023-11-04 11:07:34浏览次数:43  
标签:子串 cnt 2914 二进制 cntList 妹学 美丽 字符串 长度

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


3妹:呜呜,烦死了, 脸上长了一个痘

2哥 : 不要在意这些细节嘛,不用管它,过两天自然不就好了。

3妹:切,你不懂,影响这两天的心情哇。

2哥 : 我看你是不急着找工作了啊, 工作那么辛苦,哪还有时间想这些啊。

3妹:说到找工作,我又要去刷题了。

2哥:我给你出一道关于美丽的题吧,让你的心情美丽美丽~


 1题目: 

给你一个长度为偶数下标从 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' 。

 2思路: 

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

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

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

 3java代码: 

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;
    }
}

标签:子串,cnt,2914,二进制,cntList,妹学,美丽,字符串,长度
From: https://blog.51cto.com/u_6813689/8179434

相关文章

  • 【教3妹学编程-算法题】数组中两个数的最大异或值
    3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”2哥 :3妹,什么事呀这么开心呀。3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。2哥:是啊,都快立冬了,天气还是这么热。今年的冬天比以往来的要晚一些。3妹:晚来也是要来的,看天气预报下周要降温,估计没几......
  • Redhat8.2二进制安装mysql8.0,启动报错
    报错信息:bin/mysql:errorwhileloadingsharedlibraries:libtinfo.so.5:cannotopensharedobjectfile:Nosuchfileordirectory解决办法:ll/usr/lib64/libtinfo.so.6[root@zabbixservermysql]#ln-s/usr/lib64/libtinfo.so.6.2/usr/lib64/libtinfo.so.5[root@zab......
  • tp6 接收并保存二进制文件
    /***@return\think\response\Json*/publicfunctionupload(){$data=file_get_contents("php://input");$fileType='';$this->getFileType($data,$fileType);if($fileType......
  • web前端(Vue2.x)接收H264实时视频码流(二进制)进行播放
    1、安装 [email protected]、.vue文件中使用<template><div><videoid="dom_id"muted="muted"controlsclass="video_box"></video><divv-if="!has_data"v-loading="!......
  • 如何使用SHC对Shell脚本进行二进制编译和封装
    在许多情况下,我们需要保护我们的shell脚本源码不被别人轻易查看。这时,使用shc工具将shell脚本编译成二进制文件是一个有效的方法。本文将详细介绍如何在线和离线条件下安装shc,并将其用于编译你的脚本。什么是SHC?shc是一个由C语言编写的Shell脚本加密程序,它可以将你的脚本编译成......
  • CD4028B是BCD到十进制或二进制到八进制解码器
    概述■CD4028B是BCD到十进制或二进制到八进制解码器,由4个输入、解码逻辑门和10个输出缓冲器组成。应用于4个输入(A、B、C和D)的BCD码在选定的10进制1解码输出处产生高电平。类似地,应用于输入a、B和C的3位二进制代码在输出0–7处以八进制解码。D输入处的高电平信号禁止八进制解码,并导......
  • 探索计算机内部的神秘语言:二进制的魅力
    引言在之前的章节中,我们已经详细介绍了计算机硬件的组成部分,包括中央处理器(CPU)、内存、磁盘和总线等。因此,从今天开始,我们将深入探讨计算机内部的工作原理。首先,我们将从二进制这个简单而重要的概念开始讲解,因为计算机底层只能使用二进制来表示和处理信息。二进制我们都知道,计......
  • 转换字符串为二进制编码字符串
    varfillZeroToEight=function(numStr){if(numStr.length>=8){returnnumStr;}vardiff=8-numStr.length;varzeroStr="";for(letindex=0;index<diff;index++){zeroStr+="0"......
  • 其他进制转换成二进制
    0.背景在嵌入式开发中,我们要操作寄存器,都是按bit来操作的,但是我们的数据一般都是十进制或者十六进制,经过一些位运算,很难看明白一个某一位是多少,所以我们开发一个打印函数,来看看具体某一位是多少。一、十进制转二进制https://www.cnblogs.com/haoran123/p/17782069.html转换......
  • 【Python 千题 —— 基础篇】进制转换:十进制转二进制
    题目描述题目描述计算机底层原理中常使用二进制来表示相关机器码,学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序,输入一个十进制数,将其转换成二进制数。输入描述输入一个十进制数。输出描述程序将输入的十进制数转换为二进制数,并输出其二进制形式。示例示例......