0

0

通过重复替换第二位,使二进制字符串相等

WBOY

WBOY

发布时间:2023-09-17 19:41:10

|

778人浏览过

|

来源于tutorialspoint

转载

通过重复替换第二位,使二进制字符串相等

在这个问题中,我们需要将 bin1 字符串转换为 bin2 字符串,方法是将 bin1 字符串的第二个字符替换为第一个和第二个字符中的最小值或最大值,并删除第一个字符。

由于我们需要删除首字符,因此需要确保两个字符串中最后一个 len2 − 1 字符相同。另外,我们需要确保通过对 bin1 字符串的起始字符执行给定的操作,可以获取第二个字符串的第一个字符。

问题陈述 - 我们分别给出了 len1 和 len2 长度的 bin1 和 bin2 二进制字符串。我们需要检查是否可以通过以下操作将 bin1 字符串转换为 bin2 字符串。

  • 使用 bin1 字符串的第一个和第二个字符中的最小值或最大值更新 bin1 字符串的第二个字符。

  • 去掉bin1字符串的第一个字符,每次操作字符串大小都会减少1。

示例

输入

红墨
红墨

一站式小红书图文生成器

下载
bin1 = "0101011"; bin2 = "011";

输出

Yes

说明- 我们可以执行以下操作将 bin1 字符串转换为 bin2 字符串。

  • 我们可以用 min(0,1) 替换第二个字符并删除第一个字符。因此,该字符串变为 001011。

  • 我们再次执行相同的操作,字符串变为01011。

  • 在接下来的几次操作中,字符串分别变为 0011 和 011。

输入

bin1 = "1110"; bin2 = "1110";

输出

Yes

解释 - 给定的字符串已经相同。

输入

bin1 = "101101"; bin2 = "1110";

输出

No

说明 - 我们无法通过执行给定的操作将 bin1 字符串转换为 bin2 字符串。

方法 1

如果 bin1 字符串的长度较小,我们无法将其转换为 bin2 字符串。

在其他情况下,bin1 字符串的最后一个 len2 − 1 字符保持不变,因为我们不对它执行任何操作。因此,两个字符串中的最后 len2 − 1 个字符应该相同。

另外,如果bin2字符串的第一个字符是‘0’,我们应该对bin1字符串的起始字符进行min()操作,并且它应该至少包含一个‘0’。

如果bin2字符串中的第一个字符是‘1’,我们应该对bin2字符串的起始字符进行max()操作,并且它应该至少包含一个‘1’。

算法

步骤 1 - 如果 bin1 的长度小于 bin2 字符串的长度,则返回 false。

步骤 2 - 从第二个位置开始遍历 bin2 字符串。

步骤 3 - 如果 bin2[p] 不等于 bin1[p + len1 - len2],则返回 false,因为最后 len2 -1 个字符不相同。

步骤4 - 遍历第一个len1 - len2 + 1个字符,检查是否包含bin2[0]字符。如果是,则返回true。

第 5 步 - 在函数末尾返回 false。

示例

#include 
using namespace std;

bool convertAtoB(string bin1, string bin2) {
    int len1 = bin1.size(), len2 = bin2.size();
    // When length 1 is less than length 2
    if (len1 < len2) {
        return false;
    }
    // Check whether substring bin1[p + len1 - len2]... bin1[len1] and bin2[1]... bin2[len2]
    for (int p = 1; p < len2; p++) {
        if (bin1[p + len1 - len2] != bin2[p]) {
            return false;
        }
    }
    // Check whether substring bin1[0... len1 - len2 - 1] contains bin2[0]
    for (int p = 0; p < len1 - len2 + 1; p++) {
        if (bin1[p] == bin2[0]) {
            return true;
        }
    }
    return false;
}
int main() {
    string bin1 = "0101011";
    string bin2 = "011";
    bool res = convertAtoB(bin1, bin2);
    if (res == true) {
        cout << "YES, It is possible to convert bin1 to bin2.";
    } else {
        cout << "NO, It is not possible to convert bin1 to bin2.";
    }
}

输出

YES, It is possible to convert bin1 to bin2.

时间复杂度 - O(N) 来匹配字符串字符。

空间复杂度 - O(1),因为我们不使用任何动态空间。

我们学会了按照给定的操作将第一个二进制字符串转换为第二个二进制字符串。程序员可能会尝试通过用最后一个和最后第二个字符的最小值或最大值替换最后一个字符并删除最后一个字符来检查一个字符串是否可以转换为另一个字符串。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

205

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1435

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

609

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

547

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

539

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

158

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

77

2025.08.07

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
NumPy 教程
NumPy 教程

共44课时 | 2.7万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号