現在の位置: ホーム> 最新記事一覧> PHPは、ブラケットでサブストリングを反転させる効率的な方法を実装しています

PHPは、ブラケットでサブストリングを反転させる効率的な方法を実装しています

gitbox 2025-08-07

文字列処理でよくある質問

プログラミングプロセス中、文字列処理は非常に頻繁な要件です。特に、括弧やそのネストされた構造に遭遇する場合、ブラケットのサブストリングを逆にすると、多くの場合、開発者がトラブルになります。この記事では、問題の説明、アルゴリズムのアイデアから特定の実装まで、ブラケットの各ペアの文字列を逆転させる方法を紹介します。

問題の説明

通常の文字とブラケットを含む文字列が与えられた場合、目標は、ブラケットの各ペア間の内容を逆転させることです。たとえば、「(ABC)de(fgh)」を入力すると、予想される出力は「cbadehgf」です。このような問題は、明確なルールと手順を通じて効果的に解決できます。

入力と出力の例

次の例は、問題を理解するのに役立ちます。

 入力: "(xyz)(abc)"
出力: "zyxcba"

入力: "a(bc(de)fg)h"
出力: "ahgfedcba"

実装のアイデア

この問題を解決するための最も適切なデータ構造はスタックです。これは、スタックがブラケットのネストされた階層を簡単に管理できるためです。全体的なプロセスは次のとおりです。

  • 現在の文字列をスプライスするために使用されるスタックと変数を初期化します。
  • 文字列の各文字を繰り返します:
    • 開口部のブラケット "("( ")の場合、現在の文字列をスタックに押し込み、現在の文字列をクリアしてブラケットのコンテンツの処理を開始します。
    • 閉鎖ブラケット ")"が遭遇すると、現在の文字列が反転し、スタックの上部文字列がスプライスされ、現在の文字列が更新されます。
    • 他の文字は現在の文字列に直接追加されます。
  • トラバーサルが完了した後、現在の文字列が最終結果です。

PHPコードの例

function reverseParentheses($s) {
    $stack = [];
    $currentString = "";
    for ($i = 0; $i < strlen($s); $i++) {
        $char = $s[$i];
        if ($char === '(') {
            array_push($stack, $currentString);
            $currentString = "";
        } elseif ($char === ')') {
            $currentString = strrev($currentString);
            if (!empty($stack)) {
                $currentString = array_pop($stack) . $currentString;
            }
        } else {
            $currentString .= $char;
        }
    }
    return $currentString;
}

// サンプルコール
echo reverseParentheses("(abc)de(fgh)"); // 出力 cbadehgf

パフォーマンス分析

この方法の時間の複雑さはo(n)であり、nは各文字に1回アクセスされるため、入力文字列の長さです。空間的な複雑さもO(n)であり、スタックと電流文字列を保存するために使用されます。

要約します

スタック構造を使用してブラケットのサブストリングを逆転させることは、このような問題に対する効率的な解決策です。この記事で導入されたアイデアとコードの例は、実際のプロジェクトで同様の文字列処理要件に遭遇した場合の参照アプリケーションに適しており、開発者がコーディング効率と問題解決機能を改善するのに役立ちます。