用栈判断括号匹配:左括号入栈,右括号时检查栈顶是否为对应左括号并出栈,遍历完栈为空才匹配;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("{[()]}")); // true,var_dump(isValidParentheses("([)]")); // false。











