目錄
範例
說明
方法2
演算法
輸出
結論
首頁 後端開發 C++ 檢查一個字串是否可以分割成三個子字串,其中一個子字串是另外兩個子字串的子字串

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

Sep 22, 2023 am 11:53 AM
字串分割 子字串 檢查

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

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

讓我們想想解決辦法。僅當兩個字串包含第三個字串的所有字元時,第三個字串才可以是前兩個字串的子字串。所以,我們需要在給定的字串中找到至少一個出現頻率大於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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++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中的一個模組,它為使用者提供一個介面來檢索正在運行的進程和系統利用率的信息

拼字檢查在團隊中不起作用[修復] 拼字檢查在團隊中不起作用[修復] Mar 06, 2024 am 09:10 AM

我們已經開始注意到,有時拼字檢查停止工作的團隊。拼字檢查是有效溝通的基本工具,任何對它的打擊都會對工作流程造成相當大的破壞。在本文中,我們將探討拼字檢查可能無法如預期運作的常見原因,以及如何將其恢復到先前的狀態。所以,如果拼字檢查在團隊中不起作用,請遵循本文中提到的解決方案。為什麼Microsoft拼字檢查不起作用? Microsoft拼字檢查無法正常運作可能有多種原因。這些原因包括不相容的語言設定、拼字檢查功能被停用、MSTeam或MSOffice安裝損壞等。另外,過時的MSTeams和MSOf

如何在Python中檢查一個物件是否可迭代? 如何在Python中檢查一個物件是否可迭代? Aug 25, 2023 pm 10:05 PM

可迭代物件是可以使用循環或可迭代函數迭代其所有元素的物件。列表、字串、字典、元組等都稱為可迭代物件。在Python語言中,有多種方法可以檢查物件是否可迭代。讓我們一一看看。使用循環在Python中,我們有兩種循環技術,一種是使用「for」循環,另一種是使用「while」循環。使用這兩個循環中的任何一個,我們可以檢查給定的物件是否可迭代。範例在這個例子中,我們將嘗試使用“for”循環迭代一個物件並檢查它是否被迭代。以下是代碼。 l=["apple",22,"orang

在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

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

MySQL中如何使用LOCATE函數來尋找子字串在字串中的位置在MySQL中,有許多函數可以用來處理字串。其中,LOCATE函數是一種非常有用的函數,可以用來尋找子字串在字串中的位置。 LOCATE函數的語法如下:LOCATE(substring,string,[position])其中,substring為要找的子字串,string為要在其中

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驅動器運行正

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**

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條件通常,當我們必須檢查多個條件時,我們會使用

See all articles