在編程過程中,字符串的處理是非常頻繁的需求。特別是在遇到括號及其嵌套結構時,反轉括號內的子字符串常常讓開發者感到棘手。本文將從問題描述、算法思路到具體實現,系統介紹如何反轉每對括號內的字符串。
給定一個包含普通字符和括號的字符串,目標是將每對括號之間的內容反轉。例如,輸入"(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 為輸入字符串長度,因為每個字符被訪問一次。空間複雜度也為O(n),用於存儲棧和當前字符串。
利用棧結構反轉括號內的子字符串是解決此類問題的高效方案。本文介紹的思路與代碼示例,適合在實際項目中遇到類似字符串處理需求時參考應用,幫助開發者提升編碼效率與問題解決能力。