平衡括號意味著如果我們有一串括號,那麼每個開括號都有一個對應的閉括號,括號對是正確嵌套的。字串的大小應該是偶數。在這個問題中,我們給出了一個包含字元'?'的括號字串,我們的任務是透過將'?'替換為適當的括號來形成每個可能的平衡括號字串。在我們給定的字串中,只使用圓括號'('和')'。
範例範例
Input 1: str = “()(?)?” Output 1: ()(())
Explanation
的中文翻譯為:解釋
只有一個平衡的字串可以透過替換'?'來形成。
Input 2: str = “??????”
Output 2: ((())) (()()) (())() ()(()) ()()()
Explanation
的中文翻譯為:解釋
有兩種可能的方法來形成一個平衡的字串。
一種方法是用一個開括號取代索引0、1和2,用一個閉括號取代其他索引。
第二種方法是用一個開括號取代索引0、1和3,並用一個閉括號取代其他索引。
第三種方法是用開括號取代索引0、1和4,用閉括號取代其他索引。
第四種方法是用一個開括號替換索引為0、2和3的位置,用一個閉括號取代其他索引的位置。
最後一種方法是用開括號取代索引0、2和4,用閉括號取代其他索引。
方法
我們已經看到了上面給定字串的範例,讓我們繼續下一步的方法-
我們可以用回溯法來解決這個問題。
讓我們在下面討論這個方法 -
首先,我們將初始化一個名為'create'的函數,用於在將'?'替換為括號後創建所有可能的字串,參數為str和index = 0。
在這個函數中,
初始化'check'函數以驗證字串是否平衡。
#−> 首先,我們設定了基本條件。如果我們到達了字串的結束點,那麼我們必須將該字串傳遞給「check」函數來驗證字串是否平衡。如果它是平衡的,則列印該字串。
−>如果字串的目前字元是‘?’,
首先,將其替換為開括號,並呼叫相同的函數來檢查是否到達字串的末端。
其次,用閉括號替換它,並再次呼叫相同的函數來檢查我們是否已經到達字串的末尾。
最後,我們回溯字串並將目前字元賦值為‘?’
−> 否則,如果字串的當前字元是括號,則透過呼叫相同的函數移動到下一個索引。
−> 在這個函數中,我們初始化堆疊,然後進行檢查
−> 如果字串的第一個字元是閉括號,則傳回false
−> 如果目前括號已關閉,則有兩種情況:如果堆疊為空,則傳回false,因為沒有對應的開括號。否則,從棧中彈出對應的開括號。
−> 最後,我們檢查堆疊是否為空,如果為空則表示字串是平衡的,回傳true,否則還有一些括號剩餘,表示字串不平衡,回傳false。
Example
的中文翻譯為:範例
下面是用於上述回溯方法取得所有平衡字串的C 程式碼
#include <bits/stdc++.h> using namespace std; // Function 'check' to verify whether the string is balanced or not bool check(string str){ stack<char> S; // created stack // If the first character of the string is a close bracket, then return false if (str[0] == ')') { return false; } // Traverse the string using for loop for (int i = 0; i < str.size(); i++) { // If the current character is an open bracket, then push it into the stack if (str[i] == '(') { S.push('('); } // If the current character is a close bracket else { // If the stack is empty, there is no corresponding open bracket return false if (S.empty()){ return false; } // Else pop the corresponding opening bracket from the stack else S.pop(); } } // If the stack is empty, return true if (S.empty()){ return true; } else { return false; } } // Function 'create' to create all possible bracket strings void create(string str, int i){ // If reached the end of the string if (i == str.size()) { // passed 'str' to the 'check' function to verify whether the string is balanced or not if (check(str)) { // If it is a balanced string cout<< str << endl; // print the string } return; } // If the current character of the string is '?' if (str[i] == '?') { str[i] = '('; // replace ? with ( create(str, i + 1); // continue to next character str[i] = ')'; // replace ? with ) create(str, i + 1); // continue to next character // backtrack str[i] = '?'; } // If the current character is bracketed then move to the next index else { create(str, i + 1); } } int main(){ string str = "??????"; //given string // Call the function create (str, 0); return 0; }
輸出
((())) (()()) (())() ()(()) ()()()
時間複雜度與空間複雜度
上述程式碼的時間複雜度為O(N*(2^N)),因為我們需要在字串上進行回溯。
上述程式碼的空間複雜度為O(N),因為我們將括號儲存在堆疊中。
其中N是字串的大小。
結論
在本教程中,我們實作了一個程序,用於列印所有平衡的括號字串,可以透過替換通配符‘?’來形成。我們實作了一種回溯的方法。時間複雜度為O(N*(2^N),空間複雜度為O(N)。其中N為字串的大小。
以上是列印所有透過替換通配符「?」而形成的平衡括號字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!

1)c relevantduetoItsAverity and效率和效果臨界。 2)theLanguageIsconTinuellyUped,withc 20introducingFeaturesFeaturesLikeTuresLikeSlikeModeLeslikeMeSandIntIneStoImproutiMimproutimprouteverusabilityandperformance.3)

C 在現代世界中的應用廣泛且重要。 1)在遊戲開發中,C 因其高性能和多態性被廣泛使用,如UnrealEngine和Unity。 2)在金融交易系統中,C 的低延遲和高吞吐量使其成為首選,適用於高頻交易和實時數據分析。

C 中有四種常用的XML庫:TinyXML-2、PugiXML、Xerces-C 和RapidXML。 1.TinyXML-2適合資源有限的環境,輕量但功能有限。 2.PugiXML快速且支持XPath查詢,適用於復雜XML結構。 3.Xerces-C 功能強大,支持DOM和SAX解析,適用於復雜處理。 4.RapidXML專注於性能,解析速度極快,但不支持XPath查詢。

C 通過第三方庫(如TinyXML、Pugixml、Xerces-C )與XML交互。 1)使用庫解析XML文件,將其轉換為C 可處理的數據結構。 2)生成XML時,將C 數據結構轉換為XML格式。 3)在實際應用中,XML常用於配置文件和數據交換,提升開發效率。

C#和C 的主要區別在於語法、性能和應用場景。 1)C#語法更簡潔,支持垃圾回收,適用於.NET框架開發。 2)C 性能更高,需手動管理內存,常用於系統編程和遊戲開發。

C#和C 的歷史與演變各有特色,未來前景也不同。 1.C 由BjarneStroustrup在1983年發明,旨在將面向對象編程引入C語言,其演變歷程包括多次標準化,如C 11引入auto關鍵字和lambda表達式,C 20引入概念和協程,未來將專注於性能和系統級編程。 2.C#由微軟在2000年發布,結合C 和Java的優點,其演變注重簡潔性和生產力,如C#2.0引入泛型,C#5.0引入異步編程,未來將專注於開發者的生產力和雲計算。

C#和C 的学习曲线和开发者体验有显著差异。1)C#的学习曲线较平缓,适合快速开发和企业级应用。2)C 的学习曲线较陡峭,适用于高性能和低级控制的场景。

C#和C 在面向对象编程(OOP)中的实现方式和特性上有显著差异。1)C#的类定义和语法更为简洁,支持如LINQ等高级特性。2)C 提供更细粒度的控制,适用于系统编程和高性能需求。两者各有优势,选择应基于具体应用场景。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

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

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)