当前位置: 面试刷题>> 小括号匹配 (经典算法题500道)


题目描述补充

题目:小括号匹配

给定一个字符串,其中包含圆括号()、方括号[]和花括号{}。我们需要编写一个函数来检查这个字符串中的括号是否有效并正确匹配。

有效的括号必须满足以下条件:

  1. 括号必须正确闭合,即每个开括号([{都必须有一个对应的闭括号)]}
  2. 括号必须以正确的顺序闭合,即先出现的开括号需要先闭合。

示例

  • 输入:"()[]{}"

  • 输出:true

  • 输入:"(]"

  • 输出:false

  • 输入:"([)]"

  • 输出:false

  • 输入:"{}"

  • 输出:true

PHP 示例代码

function isValid($s) {
    $stack = [];
    $map = [')' => '(', ']' => '[', '}' => '{'];

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

        // 如果是左括号,压入栈
        if (!isset($map[$char])) {
            array_push($stack, $char);
        } else {
            // 如果是右括号,检查栈顶元素是否匹配
            $topElement = end($stack);
            if (key_exists($char, $map) && $map[$char] === $topElement) {
                array_pop($stack);
            } else {
                return false;
            }
        }
    }

    // 如果栈为空,则所有括号都匹配成功
    return empty($stack);
}

// 示例测试
echo isValid("()[]{}") ? "true" : "false"; // true
echo "\n";
echo isValid("(]") ? "true" : "false"; // false

Python 示例代码

def isValid(s):
    stack = []
    mapping = {')': '(', ']': '[', '}': '{'}

    for char in s:
        if char not in mapping:
            stack.append(char)
        elif not stack or stack.pop() != mapping[char]:
            return False

    return not stack

# 示例测试
print(isValid("()[]{}")) # True
print(isValid("(]")) # False

JavaScript 示例代码

function isValid(s) {
    const stack = [];
    const map = { ')': '(', ']': '[', '}': '{' };

    for (let char of s) {
        if (!map[char]) {
            stack.push(char);
        } else if (stack.length === 0 || stack.pop() !== map[char]) {
            return false;
        }
    }

    return stack.length === 0;
}

// 示例测试
console.log(isValid("()[]{}")); // true
console.log(isValid("(]")); // false

码小课网站分享: 码小课网站提供了更多关于算法和数据结构的学习资源,包括视频教程、编程题解、面试技巧等,旨在帮助广大编程爱好者提升编程能力和应对编程面试的能力。欢迎访问码小课网站,与更多学习者一同进步。

推荐面试题