📌  相关文章
📜  国际空间研究组织 | ISRO CS 2014 |问题 12(1)

📅  最后修改于: 2023-12-03 14:50:46.915000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2014 | 问题 12
问题描述

ISRO CS 2014 是印度国际空间研究组织的招聘考试。问题 12 是一个与字符串和逻辑运算相关的问题。

给定一个字符串 str,编写一个函数 is_balanced(str) 来判断字符串中的括号是否平衡。如果字符串中的括号是平衡的,则返回 True;否则返回 False

例如:

is_balanced("[()]{}{[()()]()}")  # True
is_balanced("[(])")              # False
输入

函数 is_balanced 接受一个字符串 str,其中包含了不同类型的括号。字符串的长度不超过 1000。

输出

函数 is_balanced 返回一个布尔值,表示字符串中的括号是否平衡。

实现思路

要判断一个字符串中的括号是否平衡,我们可以使用栈的数据结构来实现。

  1. 创建一个空栈。
  2. 遍历字符串中的每个字符:
    • 如果字符是一个左括号(例如 {, [, (),将其推入栈中。
    • 如果字符是一个右括号(例如 }, ], )),从栈中弹出一个元素,并将其与当前右括号进行匹配。
      • 如果栈为空,或者弹出的左括号与当前右括号不匹配,则返回 False
      • 如果匹配成功,继续遍历下一个字符。
  3. 遍历结束后,检查栈是否为空。如果栈为空,则表示所有括号都匹配成功,返回 True;否则返回 False
代码实现
def is_balanced(str):
    stack = []  # 创建一个空栈

    for char in str:
        if char in ['{', '[', '(']:
            stack.append(char)  # 左括号入栈
        else:
            if not stack:  # 栈为空时,右括号没有与之匹配的左括号
                return False
            
            top = stack.pop()  # 弹出栈顶元素

            # 检查栈顶元素与当前右括号是否匹配
            if (char == '}' and top != '{') or \
               (char == ']' and top != '[') or \
               (char == ')' and top != '('):
                return False
    
    return len(stack) == 0  # 检查栈是否为空

print(is_balanced("[()]{}{[()()]()}"))  # True
print(is_balanced("[(])"))              # False
复杂度分析
  • 时间复杂度:O(n),其中 n 是输入字符串的长度。我们需要遍历字符串中的每个字符。
  • 空间复杂度:O(n),最坏情况下,当所有字符都是左括号时,栈的大小为 n。