与えられた括弧シーケンス; 次に、無効な括弧を削除することで作成できるすべての括弧を出力する必要があります。たとえば、
Input : str = “()())()” - Output : ()()() (())() There are two possible solutions "()()()" and "(())()" Input : str = (v)())() Output : (v)()() (v())()
この質問では、バックトラッキングメソッドを使用して、すべての有効なシーケンスを出力します。
この方法では、BFS を使用して開き括弧と閉じ括弧を 1 つずつ削除してみます。次に、シーケンスごとにそれが有効かどうかを確認します。有効な場合は、出力として印刷します。
#include <bits/stdc++.h> using namespace std; bool isParenthesis(char c){ return ((c == '(') || (c == ')')); } bool validString(string str){ // cout << str << " "; int cnt = 0; for (int i = 0; i < str.length(); i++){ if (str[i] == '(') cnt++; else if (str[i] == ')') cnt--; if (cnt < 0) return false; } // cout << str << " "; return (cnt == 0); } void validParenthesesSequences(string str){ if (str.empty()) return ; set<string> visit; // if we checked that sting so we put it inside visit // so that we will not encounter that string again queue<string> q; // queue for performing bfs string temp; bool level; // pushing given string as starting node into queue q.push(str); visit.insert(str); while (!q.empty()){ str = q.front(); q.pop(); if (validString(str)){ // cout << "s"; cout << str << "\n"; // we print our string level = true; // as we found the sting on the same level so we don't need to apply bfs from it } if (level) continue; for (int i = 0; i < str.length(); i++){ if (!isParenthesis(str[i])) // we won't be removing any other characters than the brackets from our string continue; temp = str.substr(0, i) + str.substr(i + 1); // removing parentheses from the strings one by one if (visit.find(temp) == visit.end()) { // if we check that string so we won't check it again q.push(temp); visit.insert(temp); } } } } int main(){ string s1; s1 = "(v)())()"; cout << "Input : " << s1 << "\n"; cout << "Output : "; validParenthesesSequences(s1); return 0; }
Input : (v)())() Output : (v())()
上記のメソッドでは、括弧を1つずつ削除し、追跡も行います。同じシーケンスを繰り返しチェックすることを避けるために、前のシーケンスを削除します。有効なシーケンスが見つかった場合は、すべての有効な可能性を出力します。これがプログラムの実行方法です。
このチュートリアルでは、無効な括弧を見つけて削除するという問題を解決しました。また、この問題を解決するための C プログラムと完全な解決策 (一般的な方法) も学びました。同じプログラムを C、Java、Python などの他の言語で書くことができます。このチュートリアルがお役に立てば幸いです。
以上がC++は式から無効な括弧を削除しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。