搜尋
首頁後端開發C++檢查一個字串是否可以分割成三個子字串,其中一個子字串是另外兩個子字串的子字串

檢查一個字串是否可以分割成三個子字串,其中一個子字串是另外兩個子字串的子字串

在這個問題中,我們需要分割給定的字串,使得第三個子字串可以是前兩個子字串的子字串。

讓我們想想解決辦法。僅當兩個字串包含第三個字串的所有字元時,第三個字串才可以是前兩個字串的子字串。所以,我們需要在給定的字串中找到至少一個出現頻率大於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() 方法來計算特定字元的出現次數。

  • count() 方法將對開始位置的參考作為第一個參數,對結束位置的參考作為第二個參數,以及一個字元作為第三個參數。

    在這裡,我們需要將字元的 ASCII 值作為參數傳遞,我們使用 I ‘a’ 來取得該值。

  • 第 5 步 - 如果 count() 方法傳回大於或等於 3,則傳回 true。

  • 第 6 步 - 循環終止時傳回 false。

範例

#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中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除
如何在Python中检查一个对象是否可迭代?如何在Python中检查一个对象是否可迭代?Aug 25, 2023 pm 10:05 PM

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

MySQL中如何使用LOCATE函数查找子字符串在字符串中的位置MySQL中如何使用LOCATE函数查找子字符串在字符串中的位置Jul 25, 2023 am 09:45 AM

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

在Java中递归地计算子字符串出现的次数在Java中递归地计算子字符串出现的次数Sep 17, 2023 pm 07:49 PM

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

strtok_r()函数是C语言中的一个函数,它的作用是将字符串分割成一系列子字符串strtok_r()函数是C语言中的一个函数,它的作用是将字符串分割成一系列子字符串Aug 26, 2023 am 09:45 AM

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

win11改win10系统教程的详细介绍win11改win10系统教程的详细介绍Jul 08, 2023 pm 09:21 PM

微软6月24号正式公布了win11系统,可以看到用户界面、开始菜单等和Windows10X中发现的非常相似。有的朋友在使用预览版的时候发现用的不习惯,想要改win10系统开使用,那么我们要如何操作呢,下面我们就来看看win11改win10系统教程,一起来学习一下吧。1、第一步是从Windows11打开新设置。在这里,您需要转到图像中显示的系统设置。2、在系统设置下,选择“恢复”选项。在这里,您将能够看到“以前版本的窗口”选项。您还可以在它旁边看到一个“返回”按钮,单击此按钮。3、您可以指定要返回

PHP中如何使用PHP-CS-Fixer进行代码风格检查PHP中如何使用PHP-CS-Fixer进行代码风格检查Jun 27, 2023 pm 01:27 PM

在开发过程中,良好的代码风格是提高代码质量和可读性的重要因素。而PHP作为当今市场上应用最广泛的编程语言之一,其代码风格检查也显得尤为重要。在这里,我们将介绍一种PHP代码风格检查工具——PHP-CS-Fixer,并详细讲解如何在其上进行代码风格检查。首先,我们需要了解PHP-CS-Fixer是什么。PHP-CS-Fixer是一个由Symfony框架创建的P

使用PHP函数 "is_object" 检查变量是否为对象类型使用PHP函数 "is_object" 检查变量是否为对象类型Jul 26, 2023 am 08:29 AM

使用PHP函数"is_object"检查变量是否为对象类型在PHP中,变量可以保存不同类型的值,包括整数、字符串、数组、布尔值等等。其中,对象是一种特殊的数据类型,用于封装数据和方法。在处理PHP代码中,我们经常需要检查一个变量是否为对象类型,以便进行相应的处理。PHP提供了一个内置函数"is_object"来实现这个功能。is_object函数的语

在Python中检查字符串是否存在于PDF文件中在Python中检查字符串是否存在于PDF文件中Aug 19, 2023 pm 05:57 PM

在当今的数字世界中,PDF文件已成为存储和共享信息的重要媒介。然而,有时候在PDF文档中查找特定的文本字符串可能会很困难,特别是当文件很长或复杂时。这就是流行的编程语言Python派上用场的地方。Python提供了几个库,允许我们与PDF文件进行交互并从中提取信息。一个常见的任务是在PDF文件中搜索特定的字符串。这可以用于各种目的,如数据分析、文本挖掘或信息检索。在这个背景下,我们有一个问题,我们想要检查一个特定的字符串是否存在于一个PDF文件中。为了解决这个问题,我们可以使用两种不同的方法。第

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器