当前位置: 首页> 最新文章列表> 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 为输入字符串长度,因为每个字符被访问一次。空间复杂度也为 O(n),用于存储栈和当前字符串。

总结

利用栈结构反转括号内的子字符串是解决此类问题的高效方案。本文介绍的思路与代码示例,适合在实际项目中遇到类似字符串处理需求时参考应用,帮助开发者提升编码效率与问题解决能力。