通过重复将两个连续的0替换为单个1,使给定的二进制字符串相等
在任何编程语言中,二进制字符串是由字符0和1组成的集合。在每个阶段,二进制字符串遵循的方法是字符串只能包含这两个字符。
连续字符串中的字符是指索引之间的差为1的字符。让我们考虑两个索引,i和j,如果|j-i| = 1,则它们被称为连续的。
在C++中,如果两个字符串等价,则表示:
两个字符串中对应的字符相同。
字符串的长度相等,并且相应索引处的字符重合。
说明问题陈述的一些示例如下 -
示例示例
str1 - “10001”
str2 - “101”
解决方案-
str1 无法转换为 str2,因为在将 str1 转换为创建等效字符串 str2 的过程中,我们将得到 str1 为“1011”,而 str2 是“101”。
示例2 - 让我们考虑以下输入−
str1 - “001”
str2 - “11”
解决方案-
str1可以通过将前两个零更改为一个1来转换为str2。
使用C++中的字符匹配和字符串遍历可以解决以下问题。
算法
步骤 1 - 两个指针 i 和 j 分别用于同时迭代字符串 s1 和 s2。
第 2 步 - 如果两个索引处的字符匹配,我们将增加 i 和 j 指针。
步骤 3 − 如果字符不相等,我们检查第i个和第(i+1)个索引处的字符是否为‘0’,以及第j个索引处的字符是否为‘1’。
第四步 - 如果存在这样的情况,可以进行转换。i指针增加两个位置,j增加一个索引位置,因为两个零都被转换为一。
第五步 - 如果字符不相等,并且上述情况也不存在,则无法进行转换。
步骤 6 − 如果指针 i 和 j 都成功到达末尾位置,则可以将 s1 转换为 s2。
示例
以下代码片段将两个二进制字符串作为输入,并根据指定条件检查这两个字符串是否可以通过简单的字符替换来等效
//including the required libraries #include <bits/stdc++.h> using namespace std; //convert consecutive 0's to 1 bool convertBinary(string s1, string s2){ //fetching the lengths of both the strings int len1 = s1.length(); int len2 = s2.length(); string temp =""; //maintaining counters of both the strings int i = 0, j = 0; //iterating over both the strings simultaneously while (i < len1 && j < len2) { //if both the characters are equivalent in nature //skip to next character if (s1[i] == s2[j]) { temp+=s1[i]; //incrementing both pointers i++; j++; } // if both characters differ else { // checking if '00' of s1 can be converted to '1' of s2 if(s2[j]=='1' && s1[i]=='0'){ //checking if i+1th index exists and is equivalent to 0 if(i+1 < len1 && s1[i+1]=='0'){ //conversion is possible //skip two 0's of s1 since converted to 1 in s2 temp+='1'; i += 2; j++; } else { return false; } } // If not possible to combine else { return false; } } } cout<<"Entered string2 "<<s2<<"\n"; cout<<"Converted string1 "<<temp<<"\n"; //check if both the strings are returned to end position if (i == len1 && j == len2) return true; return false; } // calling the conversion rate int main(){ string str1 = "100100"; string str2 = "1111"; //capturing result cout<<"Entered string1 "<<str1<<"\n"; bool res = convertBinary(str1, str2); if (res) cout << "First string can be converted to second"; else cout << "First string can't be converted to second"; return 0; }
输出
Entered string1 100100 Entered string2 1111 Converted string1 1111 First string can be converted to second
结论
由于该方法可以有效地逐个字符地比较输入字符串,时间复杂度为 O(min(字符串长度))。字符串遍历是解决字符串问题的一个重要方面。
以上是通过重复将两个连续的0替换为单个1,使给定的二进制字符串相等的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在这个问题中,我们需要找到给定字符串的最长非递增子序列。非递增的意思是字符要么相同,要么按降序排列。由于二进制字符串仅包含“0”和“1”,因此生成的字符串应以“1”开头并以“0”结尾,或者以“0”或“1”开头和结尾。为了解决这个问题,我们将统计字符串每个位置的前缀“1”和后缀“0”,并找到前缀“1”和后缀“0”的最大和。问题陈述-我们给出了二进制字符串str。我们需要从给定的字符串中找到最长的非递增子序列。示例Input–str="010100"Output–4说明最长的非递

在给定的问题中,我们得到一个由0和1组成的字符串;我们需要找到以1开头的所有排列的总数。由于答案可能是一个巨大的数字,所以我们将其取模1000000007后输出。Input:str="10101001001"Output:210Input:str="101110011"Output:56我们将通过应用一些组合数学和建立一些公式来解决这个问题。解决方案的方法在这个方法中,我们将计算0和1的数量。现在假设n是我们字符串中出现的1的数量,m是我们字符串中出现的0

pack()函数将数据打包到二进制字符串中。语法pack(format,args)参数格式-要使用的格式。以下是可能的值-a-NUL填充字符串A-空格填充字符串h-十六进制字符串,低半字节在前H-十六进制字符串,高半字节在前c-带符号字符C-无符号字符s-带符号短字符(始终为16位,机器字节顺序)S-无符号短整型(始终为16位,机器字节顺序)n-无符号短整型(始终为16位,大端字节顺序)v-无符号短整型(始终为16位,小端字节顺序)i-有符号整数(取决于机器的大小和字节顺序)I-无符号整数(取决

鼠标驱动要一直开着吗鼠标是我们日常使用电脑时不可或缺的输入设备之一。除了硬件本身的质量,鼠标驱动程序也是鼠标正常工作的关键。然而,很多人对鼠标驱动的作用和必要性存在一些疑问,特别是是否需要一直开着鼠标驱动。首先,我们需要了解鼠标驱动的作用是什么。鼠标驱动是一种软件程序,它的主要职责是与操作系统进行通信,以便识别和控制鼠标的移动、点击和滚动等动作。鼠标驱动可以

问题陈述我们有一个字符串str和一个二进制字符串B。两个字符串的长度都等于N。我们需要检查是否可以通过在字符串B中包含不相等字符的任意索引对上多次交换其字符,使字符串str成为回文字符串。示例示例输入str=‘AAS’B=‘101’输出‘YES’Explanation的中文翻译为:解释我们可以交换str[1]和str[2],因为B[1]和B[2]不相等。最终的字符串可以是'ASA'。输入str=‘AASS’B=‘1111’输出‘No’Explanation的中文翻译为:解释我们无法使字符串回文,

给定两个相同长度的二进制字符串str1和str2,我们必须通过从给定的相同长度的字符串中选择子字符串来最大化给定的函数值。给定的函数是这样的-fun(str1,str2)=(len(子字符串))/(2^xor(sub1,sub2))。这里,len(substring)是第一个子字符串的长度,而xor(sub1,sub2)是给定子字符串的异或,因为它们是二进制字符串,所以这是可能的。示例Input1:stringstr1=10110&stringstr2=11101Output:3说明我们

问题陈述我们给定了二进制字符串str,我们要求从字符串中删除最少的字符,以便我们可以将所有零放在1之前。示例输入str=‘00110100111’输出3说明这里,我们可以通过两种方式实现输出3。我们可以从字符串中删除arr[2]、arr[3]和arr[5]或arr[4]、arr[6]和arr[7]。输入str=‘001101011’输出2说明我们可以删除arr[4]和arr[6],将所有零放在1之前。输入str=‘000111’输出0说明在给定的字符串中,所有零都已放置在1之前,因此我们不需要从

本文的目的是实现一个程序,用于计算由一个子字符串重复连接而成的长度为N的二进制字符串的数量。目标是确定通过重复连接给定文本的单个子字符串,可以创建多少长度为N的二进制字符串,其中N是一个正整数。问题陈述实现一个程序,用于计算重复连接子字符串的长度为N的二进制字符串的数量。示例示例1LetustaketheInput,N=3Output:2Explanation的中文翻译为:解释下面列出了长度为N=3的可行二进制字符串,其中重复连接了一个子字符串。"000":Thesubstr
