将二进制字符串中的1和0分别分隔在不同的半部分中

将二进制字符串中的1和0分别分隔在不同的半部分中

在本教程中,我们需要将给定二进制字符串的所有 1 和 0 分成两半。在这里,我们需要从给定的字符串中取出一个子字符串,并将其反转以分隔不同部分的 0 和 1。最终,我们需要计算子串将 1 和 0 分成两半所需的反转总数。

问题陈述 – 我们给出了偶数长度的二进制字符串。我们需要多次从给定字符串中取出任何子字符串并将其反转以将其分成两半。我们需要在最后打印所需反转的总数。

示例

Input –  str = 0011

登录后复制

Output – 0

登录后复制

说明

我们需要 0 次反转,因为字符串被分成两半。

Input –  str = 0011101000

登录后复制

Output – 2

登录后复制登录后复制

说明

首先,从第5个索引开始取长度为2的子字符串,并将其反转。结果字符串将为0011110000。

之后,从开头取一个长度为6的字符串,并将其反转。结果字符串将为1111000000

Input –  str = 010101

登录后复制

Output – 2

登录后复制登录后复制

说明

从第一个索引开始反转长度为 2 的字符串。结果字符串将为 001101。

现在,反转从第二个索引开始的长度为3的字符串。最终的字符串将是000111。

方法 1

此方法将计算不同相邻元素的总数。之后,我们可以说所需的反转总数为 count / 2。

让我们通过调试示例输入来理解它。

Input –  str = 00111010

登录后复制

所以,不同相邻元素的总数为4。这里,str[1] != str[2], str[4] != str[5], str[5] != str[6],并且 str[6] != str[7]。

所以,计数值为4,答案是count/2,等于2。

算法

第 1 步 – 将“cnt”变量初始化为 0。

第 2 步 – 使用 for 循环,并迭代字符串。

步骤 3 − 在for循环中,如果当前元素不等于上一个元素,则将‘cnt’变量的值增加1。

步骤 4 − 如果 ‘cnt’ 的值是奇数,则返回 (cnt -1) /2。否则,返回 cnt/2。

Example

的中文翻译为:

示例

#include using namespace std;//  function to find the minimum number of reversals required to segregate 1s and 0s in a separate halfint minimumReversal(string str, int len){   int cnt = 0; // initialize count with zero   for (int i = 1; i 

输出

Minimum number of operations required is : 2

登录后复制

时间复杂度 - O(N),因为我们遍历字符串。

空间复杂度 - O(N),因为我们使用常数空间来存储计数。

在这里,我们使用了每当找到两个不同的相邻元素时就需要反转的逻辑。此外,在单个反向操作中,我们可以设置两个元素,因此我们返回 count/2 作为结果值。

以上就是将二进制字符串中的1和0分别分隔在不同的半部分中的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2585873.html

(0)
上一篇 2025年3月6日 15:09:14
下一篇 2025年3月1日 19:33:31

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论