检查一个字符串是否可以被分割成三个子字符串,其中一个子字符串是另外两个子字符串的子串
在这个问题中,我们需要分割给定的字符串,使得第三个子字符串可以是前两个子字符串的子字符串。
让我们想想解决办法。仅当前两个字符串包含第三个字符串的所有字符时,第三个字符串才可以是前两个字符串的子字符串。所以,我们需要在给定的字符串中找到至少一个出现频率大于3的字符,并且我们可以取该单个字符的第三个子串。
问题陈述 - 我们给出了一个包含 N 个小写字母字符的字符串 str。我们需要检查是否可以将字符串拆分为三个子字符串 a、b 和 c,使得子字符串 c 是 a 和 b 的子字符串。根据是否能找到 3 个子串,打印“yes”或“no”。
示例
Input – str = "tutorialsPoint"
Output – ‘Yes’
说明
在这里,我们可以将字符串拆分为“tu”、“torialsPoin”和“t”。因此,第三个字符串是前两个字符串的子字符串。
Input – str = "tutorials"
Output – ‘No’
说明
我们无法根据给定条件将字符串拆分为三个子字符串,因为任何字符的频率都不大于 3。
Input – str = "hhhhhhhh"
Output – ‘Yes’
说明
根据给定条件,三个子字符串可以是‘h’、‘h’和‘hhhhhh’。
方法 1
在这种方法中,我们将使用一个数组来存储每个字符的频率。之后,我们将检查频率大于或等于3的字符。
算法
步骤 1 - 定义长度等于 26 的“freq”数组。
步骤 2 - 遍历字符串以计算字符的频率。在 for 循环中,增加 freq[str[i] – ‘a’] 的值。这里,str[i] – ‘a’给出0到26之间的索引。
第 3 步 - 现在,遍历“freq”数组,如果任意数组索引处的值大于“3”,则返回 true。
第 4 步 - 循环终止时返回 true。
第 5 步 - 根据 isSUbStringPossible() 函数的返回值打印“是”或“否”。
示例
#include <bits/stdc++.h> using namespace std; // function to Check if a string can be split into 3 substrings such that one of them is a substring of the other two string isSubStringPossible(string str, int len){ // array to store the frequency int freq[26] = {0}; // Iterate over the string for (int i = 0; i < len; i++){ // count the frequency of each character freq[str[i] - 'a']++; } // Traverse the frequency array for (int i = 0; i < 26; i++){ // If the frequency of any character is greater than or equal to 3, then return "Yes." if (freq[i] >= 3){ return "Yes"; } } // Otherwise return "No"; } int main(){ string str = "tutorialsPoint"; int len = str.length(); cout << "The given string can be splited into 3 substrings such that one of them is a substring of the other two - " << isSubStringPossible(str, len); return 0; }
输出
The given string can be splited into 3 substrings such that one of them is a substring of the other two - Yes
时间复杂度 - O(N),当我们遍历字符串时。
空间复杂度 - O(1),因为我们使用恒定长度的数组。
方法2
在这种方法中,我们首先将字符串转换为字符数组。之后,我们使用 count() 方法来统计数组中特定字符的出现频率。
算法
第 1 步 - 创建一个大小为“len + 1”的数组,其中“len”是字符串长度。
第 2 步 - 使用 strcpy() 方法将字符串复制到 char 数组中。
第 3 步 - 使用 for 循环进行总共 26 次迭代。
步骤 4 - 在 for 循环中,使用 count() 方法来计算特定字符的出现次数。
第 5 步 - 如果 count() 方法返回大于或等于 3,则返回 true。
第 6 步 - 循环终止时返回 false。
count() 方法将对开始位置的引用作为第一个参数,对结束位置的引用作为第二个参数,以及一个字符作为第三个参数。
在这里,我们需要将字符的 ASCII 值作为参数传递,我们使用 I + ‘a’ 来获取该值。
示例
#include <bits/stdc++.h> using namespace std; // function to Check if a string can be split into 3 substrings such that one of them is a substring of the other two string isSubStringPossible(string str, int len){ // converting str to char array. char char_array[len + 1]; // copy string to char array strcpy(char_array, str.c_str()); // make 26 iterations for (int i = 0; i < 26; i++){ // Using count() to count the occurrence of each character in the array, and return 'yes' if any character occurs more than 2 times. if (count(char_array, char_array + len, i + 'a') >= 2) return "YES"; } return "NO"; } int main(){ string str = "tutorials"; int len = str.length(); cout << "The given string can be splited into 3 substrings such that one of them is a substring of the other two - " << isSubStringPossible(str, len); return 0; }
输出
The given string can be splited into 3 substrings such that one of them is a substring of the other two - Yes
时间复杂度 - O(N),因为 count() 方法迭代 char 数组来计算字符数。另外,strcpy() 方法需要 O(N) 时间。
空间复杂度 - O(N),因为我们将字符串存储到字符数组中。
结论
我们学习了两种将字符串拆分为三个子字符串的方法,这样一个子字符串可以成为另外两个子字符串的子字符串。第二种方法的代码更具可读性,对初学者更友好,但时间和空间成本更高。
以上是检查一个字符串是否可以被分割成三个子字符串,其中一个子字符串是另外两个子字符串的子串的详细内容。更多信息请关注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)

热门话题
![拼写检查在团队中不起作用[修复]](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

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

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

MySQL中如何使用LOCATE函数查找子字符串在字符串中的位置在MySQL中,有许多函数可以用来处理字符串。其中,LOCATE函数是一种非常有用的函数,可以用来查找子字符串在字符串中的位置。LOCATE函数的语法如下:LOCATE(substring,string,[position])其中,substring为要查找的子字符串,string为要在其中

给定两个字符串str_1和str_2。目标是使用递归过程计算字符串str1中子字符串str2的出现次数。递归函数是在其定义中调用自身的函数。如果str1是"Iknowthatyouknowthatiknow",str2是"know"出现次数为-3让我们通过示例来理解。例如输入str1="TPisTPareTPamTP",str2="TP";输出Countofoccurrencesofasubstringrecursi

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

该函数与strtok()函数类似。唯一的关键区别是_r,它被称为可重入函数。可重入函数是在执行过程中可以被中断的函数。这种类型的函数可用于恢复执行。因此,可重入函数是线程安全的,这意味着它们可以安全地被线程中断,而不会造成任何损害。strtok_r()函数有一个称为上下文的额外参数。这样函数就可以在正确的位置恢复。strtok_r()函数的语法如下:#include<string.h>char*strtok_r(char*string,constchar*limiter,char**

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