以下に、いくつかの方法とコード例を紹介します。
-
スタックを使用する方法: 括弧の正しさを確認する一般的な方法は、スタックを使用することです。アルゴリズムは次のようになります:
- 文字列を順番に処理します。
- オープン括弧('(', '[', '{'など)が出現した場合、スタックに追加します。
- クローズ括弧(')', ']', '}'など)が出現した場合、スタックのトップに対応するオープン括弧があるか確認します。
- 対応するオープン括弧がない場合、またはスタックが空の場合、括弧の正しさが破られています。
- 対応するオープン括弧がある場合、スタックからオープン括弧を削除します。
- 文字列の処理が終了した後、スタックが空であれば括弧の正しさが保たれています。
以下に、このアルゴリズムをC++で実装する例を示します:
#include <iostream> #include <stack> using namespace std; bool isValidParentheses(string s) { stack<char> st; for(char c : s) { if(c == '(' || c == '[' || c == '{') { st.push(c); } else if(c == ')' || c == ']' || c == '}') { if(st.empty() || !isMatchingPair(st.top(), c)) { return false; } st.pop(); } } return st.empty(); } bool isMatchingPair(char open, char close) { return (open == '(' && close == ')') || (open == '[' && close == ']') || (open == '{' && close == '}'); } int main() { string input = "((()))"; if(isValidParentheses(input)) { cout << "Valid parentheses" << endl; } else { cout << "Invalid parentheses" << endl; } return 0; }
-
正規表現を使用する方法: もう一つの方法は、正規表現を使用する方法です。正規表現を使えば、括弧の正しさを簡潔にチェックすることができます。以下に、C++で正規表現を使用する例を示します:
#include <iostream> #include <regex> using namespace std; bool isValidParentheses(string s) { regex pattern("\\(\\)|\\[\\]|\\{\\}"); return regex_replace(s, pattern, "") == ""; } int main() { string input = "((()))"; if(isValidParentheses(input)) { cout << "Valid parentheses" << endl; } else { cout << "Invalid parentheses" << endl; } return 0; }
以上が、C++で括弧の正しさを確認する方法といくつかのコード例です。これらの方法を使用することで、与えられた文字列内の括弧が正しく対応しているかどうかを確認することができます。