检查一个二进制字符串是否可以通过删除非相邻字符来按降序排序

检查一个二进制字符串是否可以通过删除非相邻字符来按降序排序

在这个问题中,我们需要通过仅删除不相邻的元素来按降序对给定的二进制字符串进行排序。

为了解决这个问题,我们需要删除二进制字符串中所有位于 1 之前的 0。如果我们在字符串中的任何位置发现两个连续的零后面有两个连续的1,则意味着我们无法对字符串进行降序排序。否则,我们可以针对每种情况进行分类。

问题陈述 – 我们给定了长度等于 N 的二进制字符串 str。我们需要检查是否可以通过从字符串中删除多个不相邻的字符来按降序对给定字符串进行排序。给定的字符串。如果字符串可以降序排序,则打印“yes”;否则,打印“否”。

示例

Input –  str = "10101100"
Output – “YES”

说明

我们可以从第二个和第四个位置删除“0”,以降序对字符串进行排序。

Input –  str = "11000"
Output – “YES”

说明

字符串已经排序。

Input –  str = “010001100”
Output – “NO”

说明

这里,我们需要去掉第1、3、4、5个位置的0来对字符串进行排序,但不能去掉相邻的0。另外,我们可以通过删除所有“1”来对字符串进行排序,但这也是不可能的,因为两个“1”是相邻的。

方法 1

在这种方法中,我们将从末尾开始遍历字符串。如果我们找到两个连续的“1”,则打破循环。之后,我们检查字符串是否包含两个连续的“0”。如果是,我们返回 false。否则,我们返回 true。

算法

步骤 1 – 开始使用 for 循环从 ‘len – 2′ 到 0 遍历字符串。这里,’len’ 是给定二进制字符串的长度。

步骤 2 – 如果 str[i] 和 str[i+1] 都等于“1”,则使用“break”关键字终止循环。

第 3 步 – 现在,开始从第 i 个索引开始遍历字符串。

步骤 4 – 如果 str[j] 和 str[j+1] 都等于 ‘0’,则返回 0。如果循环成功终止,则返回 1。 p>

第 5 步 – 根据 isSortPossible() 函数的返回值在驱动程序代码中打印“YES”或“NO”。

示例

#include using namespace std;// removing the non-adjacent characters from the given string to make it sorted in descending orderbool isSortPossible(string str, int len){   int i, j;      // Traverse the string str from the end   for (i = len - 2; i >= 0; i--){         // if str[i] and str[i + 1] is equal to 1 then break the loop.      if (str[i] == '1' && str[i + 1] == '1'){         break;      }   }      // start traversing the string from i   for (int j = i; j >= 0; j--){      // If str[j] and str[j + 1] is equal to 0 then return false      if (str[j] == '0' && str[j + 1] == '0'){         return 0;      }   }   return 1;}int main(){   string str = "10101100";   int len = str.length();   cout << "The sorting of the given binary string is possible by removing non-adjacent characters - " << endl;   if (isSortPossible(str, len))      cout << "YES" << endl;   else      cout << "NO" << endl;   return 0;}

输出

The sorting of the given binary string is possible by removing non-adjacent characters −YES

时间复杂度 – O(N),当我们迭代字符串时。

空间复杂度 – O(1)

方法2

在这种方法中,我们将使用与第一种方法相同的逻辑,但我们优化了代码以使其更具可读性。在这里,我们将仅使用单个循环,而不是使用两个单独的循环来检测两个连续“0”后的两个连续“1”。

算法

第 1 步 – 定义“isTwoZeros”变量并使用“false”值进行初始化。

第 2 步 – 开始从第 0 个索引到“len – 1”迭代字符串。

步骤 3 – 如果 str[i] 和 str[I + 1] 为“0”且“isTwoZeros”等于 false,则将“isTwoZeros”的值更改为 true 。这意味着我们在给定的字符串中得到了两个连续的零。

步骤 4 – 在 else 部分,如果 str[i] 和 str[I + 1] 为 ‘1’ 并且 ‘isTwoZeros’ 等于 true,则从功能。这意味着我们在两个连续的零之后得到了两个连续的“1”。

第 5 步 – 当 for 循环的所有迭代终止时返回 true。

示例

#include using namespace std;// removing the non-adjacent characters from the given string to make it sorted in descending orderbool isSortPossible(string str, int len){   // to track if there are two adjacent zeros in the string   bool isTwoZeros = false;      // traverse the string   for (int i = 0; i < len - 1; i++){         // if two zeros are adjacent, then change the value of isTwoZeros to true      if (str[i] == '0' && str[i + 1] == '0' && !isTwoZeros){         isTwoZeros = true;      }      else{               // if we find two adjacent ones after finding two adjacent zeros, then return false         if (str[i] == '1' && str[i + 1] == '1' && isTwoZeros){            return false;         }      }   }      // return true if we don't find two adjacent ones after finding two adjacent zeros   return true;}int main(){   string str = "101001100";   int len = str.length();   cout << "The sorting of the given binary string is possible by removing non-adjacent characters - " << endl;   if (isSortPossible(str, len))      cout << "YES" << endl;   else      cout << "NO" << endl;   return 0;}

输出

The sorting of the given binary string is possible by removing non-adjacent characters - NO

时间复杂度 – O(N)

空间复杂度 – O(1)

结论

我们学习了两种通过仅删除不相邻字符来按降序对二进制字符串进行排序的方法。两种方法都使用相同的逻辑,对代码的更改最少。第二种方法的代码比第一种方法的代码更具可读性。

以上就是检查一个二进制字符串是否可以通过删除非相邻字符来按降序排序的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:52:00
下一篇 2025年12月17日 21:52:16

相关推荐

  • 什么时候可以确认SessionStorage已被删除?

    如何确定 SessionStorage 何时被删除? 简介:SessionStorage 是 HTML5 中提供的一种客户端存储方式,用于在浏览器会话期间保存数据。与 Cookie 相比,SessionStorage 存储的数据不会被发送到服务器端,也不会随着页面刷新而丢失。然而,有时我们需要清除 …

    2025年12月21日
    000
  • 什么情况下会导致SessionStorage被清除?

    SessionStorage是HTML5提供的一种用于在浏览器中存储数据的技术。它与LocalStorage相似,但有一些特定的使用场景和限制。本文将介绍SessionStorage在什么情况下会被删除,并提供具体的代码示例。 SessionStorage是一种会话级别的存储机制,它的数据只在当前会…

    2025年12月21日
    000
  • 恢复被删除的Localstorage数据的方法有哪些?

    如何恢复被删除的Localstorage数据? Localstorage是一种用于在网页中存储数据的技术。它被广泛应用于各种网页应用程序中,以便在多个页面之间共享数据。然而,有时候我们可能会意外地删除了Localstorage中的数据,这给我们带来了困扰。那么,如何恢复被删除的Localstorag…

    2025年12月21日
    000
  • 添加或删除 HTML dom元素

    文档对象模型(document object model,简称dom),是w3c组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为dom,本章内容我们就分享给大家关于添加或删除 html dom元素的教程,赶紧来学…

    好文分享 2025年12月21日
    000
  • 将所有0放在1之前所需的最小移动次数在二进制字符串中

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

    2025年12月17日
    000
  • 使用C++删除链表的第一个节点

    给定一个链表,我们需要删除它的第一个元素并将指针返回到新链表的头部。 Input : 1 -> 2 -> 3 -> 4 -> 5 -> NULLOutput : 2 -> 3 -> 4 -> 5 -> NULLInput : 2 -> 4 …

    2025年12月17日
    000
  • 使一个字符串等于另一个字符串所需删除的最长子字符串的长度

    在本文中,我们将讨论找到需要删除的最长子字符串的长度以使一个字符串等于另一个字符串的问题。我们将首先理解问题陈述,然后探索解决该问题的简单和有效的方法,以及它们各自的算法和时间复杂度。最后,我们将用 C++ 实现该解决方案。 问题陈述 给定两个字符串 A 和 B,确定需要从字符串 A 中删除的最长子…

    2025年12月17日
    000
  • 找到在将一个二进制字符串清空(通过移除非空子字符串)后,0的数量最少的玩家

    在本文中,我们将讨论一个有趣的问题,涉及到字符串操作和博弈论领域:“通过删除非空子字符串来清空二进制字符串,找到剩余0最少的玩家”。这个问题探索了使用二进制字符串进行竞技游戏的概念。我们的目标是在游戏结束后找出剩余0最少的玩家。我们将讨论这个问题,提供一个C++代码实现,并通过一个例子来解释这个概念…

    2025年12月17日
    000
  • 使一个数能被4整除,最少需要删除的数字个数

    在本文中,我们将探讨一个有趣的计算问题 – “使一个数字能被 4 整除所需删除的最少位数”。这个问题是编码竞赛和基于算法的面试中的常见问题,为提高您的问题解决能力提供了极好的练习。 首先,让我们理解问题陈述:我们有一个数字,我们的任务是删除最少数量的数字,使得剩余的数字能被 4 整除。 …

    2025年12月17日
    000
  • 排序二进制字符串所需删除的最小字符数,以使其按升序排列

    在计算机科学中,字符串操作是一个重要的主题,涉及到拼接、子串、反转等操作。与字符串操作相关的一个常见问题是从二进制字符串中移除所有的0。在本文中,我们将讨论一种使用最少数量的非相邻对翻转来解决这个问题的算法。 问题陈述 给定一个二进制字符串,我们必须使用最少次数的非相邻对翻转来删除字符串中的所有 0…

    2025年12月17日
    000
  • 最长非递增子序列在一个二进制字符串中

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

    2025年12月17日
    000
  • 计算长度为N的二进制字符串,它们是子字符串的重复拼接

    本文的目的是实现一个程序,用于计算由一个子字符串重复连接而成的长度为N的二进制字符串的数量。 目标是确定通过重复连接给定文本的单个子字符串,可以创建多少长度为N的二进制字符串,其中N是一个正整数。 问题陈述 实现一个程序,用于计算重复连接子字符串的长度为N的二进制字符串的数量。 示例示例1 Let …

    2025年12月17日
    000
  • 使用C++编写,找到以1开头的二进制字符串的唯一排列数量

    在给定的问题中,我们得到一个由0和1组成的字符串;我们需要找到以1开头的所有排列的总数。由于答案可能是一个巨大的数字,所以我们将其取模1000000007后输出。 Input : str =”10101001001″Output : 210Input : str =”101110011″Output…

    2025年12月17日
    000
  • 使用Z算法从给定的字符串中删除所有出现的单词

    本文深入探讨了一个有趣的字符串操作问题:“使用Z算法从给定字符串中删除所有出现的单词”。这个问题是Z算法在模式搜索问题中的一个很好的应用案例,突显了它的有效性。让我们详细探讨一下。 问题陈述 给定一个字符串S和一个单词W,任务是使用Z算法从S中删除所有W的出现。 理解问题 考虑一个字符串 S =“H…

    2025年12月17日
    000
  • 使用递归从已排序的链表中删除重复项

    链表是连接在一起的元素序列。每个列表都有一个头和一系列节点,每个节点都有当前节点的数据并链接到下一个节点。链表的基本操作是插入、删除、查找和删除。 从排序链表中删除重复项 删除节点的一​​种方法是使用递归。其思想是将每个节点与其相邻节点进行比较,并删除它们相等的重复节点。 我们的递归调用将返回到下一…

    2025年12月17日
    000
  • 检查给定二进制字符串的得分

    字节序列被称为二进制字符串,它保存着二进制值。二进制分数通常在0到1的范围内表示,其中1保留给完美模型。在给定的二进制字符串中,如果元素被发现为1,则将其计算为分数并增加计数总和。 让我们以一个二进制分数的例子来说明 – 给定的二进制字符串是 1011010。 在上图中,数字1出现在索引…

    2025年12月17日
    000
  • 找到给定大小的二进制字符串数组中不存在的任意排列

    在这个问题中,我们需要从数组中找到长度为N的所有缺失的二进制字符串。我们可以通过找到长度为N的二进制字符串的所有排列,并检查哪些排列在数组中不存在来解决这个问题。在这里,我们将看到迭代和递归的方法来解决这个问题。 问题陈述 – 我们已经给出了一个包含不同长度的二进制字符串的数组arr[]…

    2025年12月17日
    000
  • python中如何删除dict元素?

    del 删除指定键,键不存在时抛出 KeyError;2. pop() 删除键并返回值,可设默认值避免错误;3. popitem() 删除并返回最后一个键值对;4. clear() 清空所有元素。 在 Python 中删除字典(dict)元素有几种常用方法,根据不同的使用场景可以选择合适的方式。 使…

    2025年12月15日
    100
  • python中怎么删除字典中的键值对_Python删除字典元素的方法

    删除字典键值对有四种方法:del语句删除指定键,pop()删除键并返回值,popitem()随机删除键值对,clear()清空字典。 在 Python 中,删除字典中的键值对主要有几种方式:使用 del 语句直接删除指定键,利用 pop() 方法删除指定键并获取其对应的值,或者通过 popitem(…

    2025年12月14日
    000
  • 简便删除Conda环境:高效清理无用环境的技巧

    一键删除Conda环境:快速清理无用环境的技巧 随着数据科学和机器学习的快速发展,使用Python进行开发和分析的需求也越来越强烈。Conda作为一种流行的Python包管理器和环境管理工具,被广泛应用于项目开发和环境配置中。然而,随着时间的推移,我们常常会在计算机上留下许多无用的Conda环境,这…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信