字串的子序列是指字串的一部分,其中可以從字串的任何位置(零個或多個元素)取出字符,而無需更改字元的順序並形成新的字串。在這個問題中,我們給出了一個長度為 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中文網其他相關文章!

C 學習者和開發者可以從StackOverflow、Reddit的r/cpp社區、Coursera和edX的課程、GitHub上的開源項目、專業諮詢服務以及CppCon等會議中獲得資源和支持。 1.StackOverflow提供技術問題的解答;2.Reddit的r/cpp社區分享最新資訊;3.Coursera和edX提供正式的C 課程;4.GitHub上的開源項目如LLVM和Boost提陞技能;5.專業諮詢服務如JetBrains和Perforce提供技術支持;6.CppCon等會議有助於職業

C#適合需要高開發效率和跨平台支持的項目,而C 適用於需要高性能和底層控制的應用。 1)C#簡化開發,提供垃圾回收和豐富類庫,適合企業級應用。 2)C 允許直接內存操作,適用於遊戲開發和高性能計算。

C 持續使用的理由包括其高性能、廣泛應用和不斷演進的特性。 1)高效性能:通過直接操作內存和硬件,C 在系統編程和高性能計算中表現出色。 2)廣泛應用:在遊戲開發、嵌入式系統等領域大放異彩。 3)不斷演進:自1983年發布以來,C 持續增加新特性,保持其競爭力。

C 和XML的未來發展趨勢分別為:1)C 將通過C 20和C 23標準引入模塊、概念和協程等新特性,提升編程效率和安全性;2)XML將繼續在數據交換和配置文件中佔據重要地位,但會面臨JSON和YAML的挑戰,並朝著更簡潔和易解析的方向發展,如XMLSchema1.1和XPath3.1的改進。

現代C 設計模式利用C 11及以後的新特性實現,幫助構建更靈活、高效的軟件。 1)使用lambda表達式和std::function簡化觀察者模式。 2)通過移動語義和完美轉發優化性能。 3)智能指針確保類型安全和資源管理。

C 多線程和並發編程的核心概念包括線程的創建與管理、同步與互斥、條件變量、線程池、異步編程、常見錯誤與調試技巧以及性能優化與最佳實踐。 1)創建線程使用std::thread類,示例展示瞭如何創建並等待線程完成。 2)同步與互斥使用std::mutex和std::lock_guard保護共享資源,避免數據競爭。 3)條件變量通過std::condition_variable實現線程間的通信和同步。 4)線程池示例展示瞭如何使用ThreadPool類並行處理任務,提高效率。 5)異步編程使用std::as

C 的內存管理、指針和模板是核心特性。 1.內存管理通過new和delete手動分配和釋放內存,需注意堆和棧的區別。 2.指針允許直接操作內存地址,使用需謹慎,智能指針可簡化管理。 3.模板實現泛型編程,提高代碼重用性和靈活性,需理解類型推導和特化。

C 適合系統編程和硬件交互,因為它提供了接近硬件的控制能力和麵向對象編程的強大特性。 1)C 通過指針、內存管理和位操作等低級特性,實現高效的系統級操作。 2)硬件交互通過設備驅動程序實現,C 可以編寫這些驅動程序,處理與硬件設備的通信。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
視覺化網頁開發工具