检查给定的字符串是否只能被拆分为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”的计数,则返回“否”。
li>
在 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中文网其他相关文章!

热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)

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

可迭代对象是可以使用循环或可迭代函数迭代其所有元素的对象。列表、字符串、字典、元组等都称为可迭代对象。在Python语言中,有多种方法可以检查对象是否可迭代。让我们一一看看。使用循环在Python中,我们有两种循环技术,一种是使用“for”循环,另一种是使用“while”循环。使用这两个循环中的任何一个,我们可以检查给定的对象是否可迭代。示例在这个例子中,我们将尝试使用“for”循环迭代一个对象并检查它是否被迭代。以下是代码。l=["apple",22,"orang
![拼写检查在团队中不起作用[修复]](https://img.php.cn/upload/article/000/887/227/170968741326618.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
我们已经开始注意到,有时拼写检查停止工作的团队。拼写检查是有效沟通的基本工具,任何对它的打击都会对工作流程造成相当大的破坏。在本文中,我们将探讨拼写检查可能无法按预期运行的常见原因,以及如何将其恢复到以前的状态。所以,如果拼写检查在团队中不起作用,请遵循本文中提到的解决方案。为什么Microsoft拼写检查不起作用?Microsoft拼写检查无法正常工作可能有多种原因。这些原因包括不兼容的语言设置、拼写检查功能被禁用、MSTeam或MSOffice安装损坏等。另外,过时的MSTeams和MSOf

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

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

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

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

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