PHP如何实现括号匹配算法题

来源:AI智能体作者:北京SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《PHP如何实现括号匹配算法题》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP如何实现括号匹配算法题》有用,将其分享出去将是对创作者最好的鼓励。

括号匹配算法题的核心是判断字符串中的各类括号是否按照规则正确配对,常见的括号类型包括小括号、中括号和大括号。实现该算法的关键是利用栈的先进后出特性,逐字符处理字符串并校验配对情况。

PHP如何实现括号匹配算法题

算法实现思路

整个算法的处理流程可以分为以下几个步骤:

  • 首先创建一个空栈,用来存储遍历过程中遇到的左括号
  • 创建一个映射关系,记录右括号对应的左括号,方便后续配对校验
  • 遍历字符串的每一个字符,判断当前字符的类型
  • 如果是左括号,直接压入栈中
  • 如果是右括号,先判断栈是否为空,为空则说明没有对应的左括号,直接返回不匹配;不为空则弹出栈顶元素,对比是否是当前右括号对应的左括号,不匹配则返回失败
  • 遍历结束后,判断栈是否为空,为空说明所有左括号都完成了配对,返回匹配成功,否则返回失败

PHP代码实现

下面是完整的PHP实现代码,包含边界情况的处理:

<?php
/**
 * 判断字符串括号是否匹配
 * @param string $str 待检测的字符串
 * @return bool 匹配返回true,否则返回false
 */
function isBracketMatch($str) {
    // 定义右括号和左括号的映射关系
    $matchMap = [
        ')' => '(',
        ']' => '[',
        '}' => '{'
    ];
    // 左括号集合,用于快速判断字符是否为左括号
    $leftBrackets = ['(', '[', '{'];
    // 初始化栈
    $stack = [];
    
    // 遍历字符串的每个字符
    $len = strlen($str);
    for ($i = 0; $i < $len; $i++) {
        $char = $str[$i];
        // 当前字符是左括号,压入栈
        if (in_array($char, $leftBrackets)) {
            array_push($stack, $char);
        } 
        // 当前字符是右括号
        elseif (isset($matchMap[$char])) {
            // 栈为空,没有对应的左括号,直接返回false
            if (empty($stack)) {
                return false;
            }
            // 弹出栈顶元素
            $top = array_pop($stack);
            // 配对不匹配,返回false
            if ($top != $matchMap[$char]) {
                return false;
            }
        }
        // 非括号字符,跳过处理
    }
    // 遍历结束后栈为空说明所有括号都匹配
    return empty($stack);
}

// 测试用例
$testCases = [
    "()",
    "()[]{}",
    "(]",
    "([)]",
    "{[]}",
    "",
    "((("
];

foreach ($testCases as $case) {
    $result = isBracketMatch($case) ? "匹配" : "不匹配";
    echo "字符串: {$case},结果: {$result}" . PHP_EOL;
}
?>

代码说明

上述代码中,isBracketMatch函数是核心实现:

  • $matchMap数组存储了右括号到左括号的映射,避免了多个条件判断
  • 使用$leftBrackets数组存储所有左括号,方便快速判断当前字符是否为左括号
  • PHP中可以用数组模拟栈的操作,array_push实现入栈,array_pop实现出栈
  • 遍历过程中遇到非括号字符直接跳过,不影响匹配结果

常见边界情况

在解题时需要注意以下几种边界场景:

  • 空字符串:按照算法逻辑,空字符串遍历后栈为空,返回匹配成功
  • 只有左括号:遍历结束后栈不为空,返回不匹配
  • 只有右括号:遇到第一个右括号时栈为空,直接返回不匹配
  • 括号交叉:比如([)],这种场景下虽然左右括号数量一致,但顺序不符合规则,算法会正确识别为不匹配

算法复杂度分析

该算法的时间复杂度是O(n),只需要遍历一次字符串,n是字符串的长度。空间复杂度是O(n),最坏情况下所有字符都是左括号,栈会存储n个元素。

PHP括号匹配算法栈数据结构字符串处理算法题修改时间:2026-06-26 14:45:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。