プログラミングプロセス中、文字列処理は非常に頻繁な要件です。特に、括弧やそのネストされた構造に遭遇する場合、ブラケットのサブストリングを逆にすると、多くの場合、開発者がトラブルになります。この記事では、問題の説明、アルゴリズムのアイデアから特定の実装まで、ブラケットの各ペアの文字列を逆転させる方法を紹介します。
通常の文字とブラケットを含む文字列が与えられた場合、目標は、ブラケットの各ペア間の内容を逆転させることです。たとえば、「(ABC)de(fgh)」を入力すると、予想される出力は「cbadehgf」です。このような問題は、明確なルールと手順を通じて効果的に解決できます。
次の例は、問題を理解するのに役立ちます。
入力: "(xyz)(abc)"
出力: "zyxcba"
入力: "a(bc(de)fg)h"
出力: "ahgfedcba"
この問題を解決するための最も適切なデータ構造はスタックです。これは、スタックがブラケットのネストされた階層を簡単に管理できるためです。全体的なプロセスは次のとおりです。
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)であり、スタックと電流文字列を保存するために使用されます。
スタック構造を使用してブラケットのサブストリングを逆転させることは、このような問題に対する効率的な解決策です。この記事で導入されたアイデアとコードの例は、実際のプロジェクトで同様の文字列処理要件に遭遇した場合の参照アプリケーションに適しており、開発者がコーディング効率と問題解決機能を改善するのに役立ちます。