目录
方法1:使用Hashmap
示例
输出
时间和空间复杂度
结论
首页 后端开发 C++ 检查给定的字符串是否只能被拆分为ABC的子序列

检查给定的字符串是否只能被拆分为ABC的子序列

Sep 06, 2023 pm 05:01 PM
检查 字符串拆分 子订单

检查给定的字符串是否只能被拆分为ABC的子序列

字符串的子序列是指字符串的一部分,其中可以从字符串的任何位置(零个或多个元素)取出字符,而无需更改字符的顺序并形成新的字符串。在这个问题中,我们给出了一个长度为 N 的字符串,其中字符串的每个字符都属于“A”、“B”或“C”字符。我们的任务是找到该字符串只能拆分为子序列“ABC”或“Not”。如果字符串仅拆分为子序列“ABC”,则返回“yes”,否则返回“no”。

Input 1: str = “AABCBC” 
Output 1: yes
登录后复制

说明 - 分割的方式是将字符串分割成“ABC”的2个子序列,如下 -

  • 其中一种可能的方法是,通过取索引为0、2、3的字符形成子序列“ABC”,然后通过取索引为1、4、5的字符形成子序列“ABC”。

  • 另一种可能的方法是,通过在索引0、4、5和1、2、3处获取字符来形成子序列“ABC”。

因此,字符串可以拆分为“ABC”的 2 个子序列。

Input 2: str = “AABBBACCC”
Output 2: no
登录后复制

解释 - 对于在索引号5处出现的'A',之后没有'B'。因此,整个字符串不能被分割为唯一的子序列"ABC"。因此,答案是"no"。

方法1:使用Hashmap

我们有两个观察结果如下 -

  • 字符串的大小应该能被3整除,因为我们需要将字符串分割为“ABC”,并且字符'A'、'B'和'C'的数量应该相等。否则,我们无法满足条件。

  • 当我们计算字符“A”、“B”和“C”的频率时,“A”的计数必须大于等于“B”的计数和“B”的计数' 必须大于等于 'C' 的计数。因为 A 的计数 >= B 的计数 >= C 的 cout

根据上述观察,我们有三个条件要检查。

  • 应为字符串大小 % 3 == 0。

  • 应该是 A 的计数 >= B 的计数 >= C 的计数。

  • 最后一个条件应该是 freq[ ‘A’ ] == freq[ ‘B’ ] == freq[ ‘C’ ] 。

我们可以使用哈希映射来解决这个问题,因为我们需要存储给定字符串“str”中每个字符的频率。

让我们逐步讨论下面的方法-

  • 首先,我们将创建一个名为“checkSubsequences”的函数,该函数将以给定的字符串“str”作为参数,并在可能的情况下返回所需的字符串“yes”,否则返回“no”作为返回值。

  • 在函数中,下面给出了所有步骤-

  • 创建变量“len”来存储字符串的长度。

  • 检查第一个条件,如果长度不能被3整除,则返回'no'。

  • 创建一个哈希映射来存储字符'A'、'B'和'C'的频率。因此,空间复杂度是常数。

  • 使用for循环从0到小于len遍历字符串。

    • 增加字符串当前字符的计数

    • 检查第二个条件,如果“A”的计数小于“B”的计数或“B”的计数小于“C”的计数,则返回“否”。

  • 在 for 循环之后,我们必须检查最后的第三个条件,如果 A 的计数不等于 B 的计数或 B 的计数不等于 C 的计数,则返回“否”。

  • 最后,当所有条件都满足时,返回“yes”。

示例

#include <bits/stdc++.h>
using namespace std;
// function to check subsequences of "ABC"
string checkSubsequences( string str ){
   int len = str.size(); //getting length of the string str
   // check first condition 
   if( len%3 != 0 ) {
      return "no";
   }
   map< char, int >freq; //store the count of character 'A', 'B' and 'C'
   for( int i=0; i<len; i++){
      freq[ str[i] ]++; // increase the count of the character
      //chech second condition 
      if(freq[ 'A' ] < freq[ 'B' ] || freq[ 'B' ] < freq[ 'C' ]){
         return "no";
      }
   }
   //check third condition 
   if(freq[ 'A' ] != freq[ 'B' ] || freq[ 'B' ] != freq[ 'C' ]){
      return "no";
   }
   // it is possible to split string only into subsequences of "ABC"
   return "yes";
}
// main function 
int main(){
   string str = "ABAAABCBC";// given string 
   // calling the function 'checkSubsequences' to check is it possible to split
   // string into subsequences of "ABC"
   string result = checkSubsequences( str );
   if( result == "yes" ){
      cout<< result << ", the string is splited only into the subsequences of ABC";
   }
   else {
      cout<< result << ", the string is not splited only into the subsequences of ABC.";
   }
   return 0;
}
登录后复制

输出

no, the string is not splited only into the subsequences of ABC.
登录后复制

时间和空间复杂度

上述代码的时间复杂度为O(N),因为我们遍历了字符串。其中N是字符串的大小。

上述代码的空间复杂度为 O(1),因为我们存储的是数字的频率,其大小恒定为 3。

结论

在本教程中,我们实现了一个程序来检查给定的字符串是否只能拆分为子序列 ABC。我们实施了一种散列方法,因为我们必须存储频率。在这种方法中,我们主要检查三个条件,如果所有条件都满足,则意味着我们只能将字符串拆分为“ABC”的子序列。

以上是检查给定的字符串是否只能被拆分为ABC的子序列的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在Python中检查应用程序是否打开? 如何在Python中检查应用程序是否打开? Aug 26, 2023 pm 06:49 PM

正在执行的程序称为进程。进程可以是当前操作系统上运行的应用程序,也可以是与操作系统相关的应用程序。如果一个应用程序与操作系统相关,它首先会创建一个进程来执行自己。其他应用程序依赖操作系统服务来执行。大多数应用程序是操作系统服务以及维护操作系统、软件和硬件的后台应用程序。在python中,我们有不同的方法来检查应用程序是否打开。让我们一一详细了解它们。使用psutil.process_iter()函数psutil是python中的一个模块,它为用户提供一个接口来检索正在运行的进程和系统利用率的信息

如何在Python中检查一个对象是否可迭代? 如何在Python中检查一个对象是否可迭代? Aug 25, 2023 pm 10:05 PM

可迭代对象是可以使用循环或可迭代函数迭代其所有元素的对象。列表、字符串、字典、元组等都称为可迭代对象。在Python语言中,有多种方法可以检查对象是否可迭代。让我们一一看看。使用循环在Python中,我们有两种循环技术,一种是使用“for”循环,另一种是使用“while”循环。使用这两个循环中的任何一个,我们可以检查给定的对象是否可迭代。示例在这个例子中,我们将尝试使用“for”循环迭代一个对象并检查它是否被迭代。以下是代码。l=["apple",22,"orang

拼写检查在团队中不起作用[修复] 拼写检查在团队中不起作用[修复] Mar 06, 2024 am 09:10 AM

我们已经开始注意到,有时拼写检查停止工作的团队。拼写检查是有效沟通的基本工具,任何对它的打击都会对工作流程造成相当大的破坏。在本文中,我们将探讨拼写检查可能无法按预期运行的常见原因,以及如何将其恢复到以前的状态。所以,如果拼写检查在团队中不起作用,请遵循本文中提到的解决方案。为什么Microsoft拼写检查不起作用?Microsoft拼写检查无法正常工作可能有多种原因。这些原因包括不兼容的语言设置、拼写检查功能被禁用、MSTeam或MSOffice安装损坏等。另外,过时的MSTeams和MSOf

Windows11中如何检查 SSD 运行状况?Win11上检查 SSD 运行状况的方法 Windows11中如何检查 SSD 运行状况?Win11上检查 SSD 运行状况的方法 Feb 14, 2024 pm 08:21 PM

Windows11中如何检查SSD运行状况?对于其快速的读取、写入和访问速度,SSD正在迅速取代HDD,但即使它们更可靠,您仍然需要在Windows11中检查SSD的运行状况。怎么去操作呢?本篇教程小编就来为大家分享一下方法吧。方法一:使用WMIC1、使用按键组合Win+R,键入wmic,然后按或单击“确定”。Enter2、现在,键入或粘贴以下命令以检查SSD运行状况:diskdrivegetstatus如果您收到“状态:正常”消息,则您的SSD驱动器运行正

Golang中如何检查字符串是否以特定字符开头? Golang中如何检查字符串是否以特定字符开头? Mar 12, 2024 pm 09:42 PM

Golang中如何检查字符串是否以特定字符开头?在使用Golang编程时,经常会遇到需要检查一个字符串是否以特定字符开头的情况。针对这一需求,我们可以使用Golang中的strings包提供的函数来实现。接下来将详细介绍如何使用Golang检查字符串是否以特定字符开头,并附上具体的代码示例。在Golang中,我们可以使用strings包中的HasPrefix

如何在Java中检查ArrayList是否包含某个元素? 如何在Java中检查ArrayList是否包含某个元素? Sep 03, 2023 pm 04:09 PM

您可以利用List接口的contains()方法来检查列表中是否存在对象。contains()方法booleancontains(Objecto)如果此列表包含指定的元素,则返回true。更正式地说,如果且仅当此列表包含至少一个元素e,使得(o==null?e==null:o.equals(e)),则返回true。参数c-要测试其在此列表中是否存在的元素。返回值如果此列表包含指定的元素,则返回true。抛出ClassCastException-如果指定元素的类型与此列表不兼容(可选)。NullP

Java程序用于检查TPP学生是否有资格参加面试 Java程序用于检查TPP学生是否有资格参加面试 Sep 06, 2023 pm 10:33 PM

请考虑下表了解不同公司的资格标准-CGPA的中文翻译为:绩点平均成绩符合条件的公司大于或等于8谷歌、微软、亚马逊、戴尔、英特尔、Wipro大于或等于7教程点、accenture、Infosys、Emicon、Rellins大于或等于6rtCamp、Cyber​​tech、Skybags、Killer、Raymond大于或等于5Patronics、鞋子、NoBrokers让我们进入java程序来检查tpp学生参加面试的资格。方法1:使用ifelseif条件通常,当我们必须检查多个条件时,我们会使用

在C语言中编写一个程序,用于检查给定的年份是否为闰年 在C语言中编写一个程序,用于检查给定的年份是否为闰年 Sep 20, 2023 pm 03:33 PM

闰年有366天,而普通年有365天,任务是通过程序检查给定的年份是否为闰年。判断的逻辑可以通过检查年份是否能被400或4整除来实现,但如果不能被这两个数整除,则为普通年。示例Input-:year=2000Output-:2000isaLeapYearInput-:year=101Output-:101isnotaLeapyear算法StartStep1-&gt;declarefunctionbooltocheckifyearifaleapyearornotboolcheck(intye

See all articles