返回

踏上 LeetCode PHP 征程:巧解 D135 20. Valid Parentheses

见解分享

简介

作为一名技术博主,我热衷于探索编码世界的奥秘。今天,我们将踏上 LeetCode PHP 的精彩征程,深入剖析 D135 20. Valid Parentheses 这道经典的括号匹配问题。准备好迎接一场思维风暴吧!

问题

给定一个包含小、中、大括号的字符串,我们的任务是判断左右括号是否匹配。例如:

  • 有效字符串: (), {}, [], ()[]{}
  • 无效字符串: (, {, )[], ([]}

PHP 解决方案

<?php

function isValid($s) {
    $stack = [];

    $brackets = [
        '(' => ')',
        '{' => '}',
        '[' => ']'
    ];

    for ($i = 0; $i < strlen($s); $i++) {
        $char = $s[$i];

        if (array_key_exists($char, $brackets)) {
            $stack[] = $char;
        } else {
            if (empty($stack) || $char !== $brackets[array_pop($stack)]) {
                return false;
            }
        }
    }

    return empty($stack);
}

$s = "()[]{}";
var_dump(isValid($s)); // true

$s = "([)]";
var_dump(isValid($s)); // false

?>

算法剖析

我们的 PHP 解决方案采用了一种优雅的栈数据结构来高效解决括号匹配问题:

  1. 初始化栈: 创建一个空栈来存储遇到的左括号。
  2. 遍历字符串: 逐个遍历输入字符串中的字符。
  3. 判断字符类型: 如果字符是左括号,则将其推入栈中;如果字符是右括号,则检查栈顶元素是否与其匹配。
  4. 匹配检查: 如果栈顶元素与右括号匹配,则将其弹出栈中;否则,表明字符串无效。
  5. 验证结果: 遍历结束后,如果栈为空,则字符串有效;否则,字符串无效。

性能优化

该算法的时间复杂度为 O(n),其中 n 是输入字符串的长度。它利用栈的先进先出特性,在遍历字符串时只进行了一次遍历。

总结

通过解决 LeetCode PHP 中的 D135 20. Valid Parentheses 问题,我们展示了一种巧妙而高效的括号匹配算法。希望这个深入的分析能激发你的编程热情,期待与你一起探索更多 LeetCode PHP 的精彩。