搜尋
首頁後端開發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

Python 3.x 中如何使用split()函数将字符串按照指定分隔符分割Python 3.x 中如何使用split()函数将字符串按照指定分隔符分割Jul 31, 2023 pm 08:33 PM

Python是一种流行的编程语言,它提供了许多内置函数来处理字符串。其中一个常用的函数是split()函数,可以按照指定的分隔符将字符串分割成多个子串。本文将介绍如何在Python3.x中使用split()函数。在Python中,split()函数是字符串类的一个内置函数,它的基本语法如下:string.split(separator,maxsplit)

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

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

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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。