返回
踏上 LeetCode PHP 征程:巧解 D135 20. Valid Parentheses
见解分享
2023-10-30 14:49:10
简介
作为一名技术博主,我热衷于探索编码世界的奥秘。今天,我们将踏上 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 解决方案采用了一种优雅的栈数据结构来高效解决括号匹配问题:
- 初始化栈: 创建一个空栈来存储遇到的左括号。
- 遍历字符串: 逐个遍历输入字符串中的字符。
- 判断字符类型: 如果字符是左括号,则将其推入栈中;如果字符是右括号,则检查栈顶元素是否与其匹配。
- 匹配检查: 如果栈顶元素与右括号匹配,则将其弹出栈中;否则,表明字符串无效。
- 验证结果: 遍历结束后,如果栈为空,则字符串有效;否则,字符串无效。
性能优化
该算法的时间复杂度为 O(n),其中 n 是输入字符串的长度。它利用栈的先进先出特性,在遍历字符串时只进行了一次遍历。
总结
通过解决 LeetCode PHP 中的 D135 20. Valid Parentheses 问题,我们展示了一种巧妙而高效的括号匹配算法。希望这个深入的分析能激发你的编程热情,期待与你一起探索更多 LeetCode PHP 的精彩。