檢查給定的字串是否只能被拆分為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脫衣器

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

熱門文章

熱工具

記事本++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

Windows11中如何檢查SSD運作狀況?對於其快速的讀取、寫入和存取速度,SSD正在迅速取代HDD,但即使它們更可靠,您仍然需要在Windows11中檢查SSD的運作狀況。怎麼去操作呢?本篇教學小編就來為大家分享一下方法吧。方法一:使用WMIC1、使用按鍵組合Win+R,鍵入wmic,然後按或按一下「確定」。 Enter2、現在,鍵入或貼上以下命令以檢查SSD運行狀況:diskdrivegetstatus如果您收到「狀態:正常」訊息,則您的SSD驅動器運行正

請考慮下表了解不同公司的資格標準-CGPA的中文翻譯為:績點平均成績符合條件的公司大於或等於8谷歌、微軟、亞馬遜、戴爾、英特爾、Wipro大於或等於7教程點、accenture、Infosys 、Emicon、Rellins大於或等於6rtCamp、Cybertech、Skybags、Killer、Raymond大於或等於5Patronics、鞋子、NoBrokers讓我們進入java程式來檢查tpp學生參加面試的資格。方法1:使用ifelseif條件通常,當我們必須檢查多個條件時,我們會使用

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

使用strings.Split函數將字串依照指定分隔符號拆分成多個子字串在Go語言中,我們可以使用strings包中的Split函數來將字串依照指定的分隔符號拆分成多個子字串。這在處理字串時非常有用,特別是當我們需要對字串進行分割、解析或提取特定的內容時。 Split函數的原型如下:funcSplit(s,sepstring)[]string其中,s
