PHP 判断括号是否匹配算法

2次阅读

用栈判断括号匹配:左括号入栈,右括号时检查栈顶是否为对应左括号并出栈,遍历完栈为空才匹配;php 用数组模拟,需预定义映射关系,支持多类型混用,须验证嵌套顺序而非仅数量。

PHP 判断括号是否匹配算法

用栈来判断括号是否匹配是最常用且高效的方法。核心思路是:遇到左括号入栈,遇到右括号时检查栈顶是否为对应左括号,匹配则出栈,不匹配或栈空则直接判定失败;遍历结束后栈必须为空才算完全匹配。

基本实现逻辑

PHP 中可用数组模拟栈(array_push() 入栈,array_pop() 出栈)。需预定义括号映射关系,如 [')' => '(', ']' => '[', '}' => '{'],便于快速比对。

  • 逐个读取字符串中的字符
  • 若为左括号(([{),压入栈中
  • 若为右括号,先检查栈是否为空:空则不匹配;非空则弹出栈顶,与当前右括号对应的左括号比较
  • 任一不等即返回 false
  • 字符串遍历完后,栈必须为空,否则存在未闭合的左括号

支持多种括号类型

算法天然支持多类型括号混用,关键在于映射数组和统一处理流程。例如字符串 "{[()]}""([{}])" 都能正确识别,而 "([)]" 会在第二个右括号处发现栈顶是 '[',但当前是 ')',对应左括号应为 '(',因此立刻返回 false。

注意:不要只检查数量相等(如 "((("")))" 数量相同但显然不匹配),必须验证嵌套顺序。

立即学习 PHP 免费学习笔记(深入)”;

边界情况处理

实际使用中需考虑这些细节:

  • 空字符串视为匹配(可依需求调整)
  • 只含非括号字符(如字母、数字、空格)不影响结果,可跳过
  • 遇到未知括号字符(如 ' 或中文括号)建议报错或忽略,避免误判
  • 区分大小写:通常括号不区分大小写,但若输入含 '{''}',就不该与 '[' 匹配,所以无需转大小写,按字面匹配即可

简洁可复用的 PHP 函数

以下是一个健壮、注释清晰的函数示例:

function isValidParentheses($str) {$stack = [];     $pairs = [')' => '(', ']' => '[', '}' => '{'];      for ($i = 0; $i < strlen($str); $i++) {$char = $str[$i];         if (in_array($char, ['(', '[', '{'])) {$stack[] = $char;         } elseif (array_key_exists($char, $pairs)) {if (empty($stack) || array_pop($stack) !== $pairs[$char]) {return false;}         }         // 忽略其他字符     }      return empty($stack); }

调用示例:var_dump(isValidParentheses("{[()]}")); // truevar_dump(isValidParentheses("([)]")); // false

text=ZqhQzanResources