📜  InfyTQ 2019:找到括号不平衡的位置(1)

📅  最后修改于: 2023-12-03 15:31:24.457000             🧑  作者: Mango

InfyTQ 2019:找到括号不平衡的位置

在编程中,括号不平衡是一个常见的错误。这个问题通常会导致程序无法编译或运行时出错。因此,找到括号不平衡的位置是非常重要的。

InfyTQ 2019是一个知名的全球技术比赛,其中有一个问题是要求参赛者编写一个程序来找到括号不平衡的位置。下面,我们将讨论如何解决这个问题。

题目描述

给定一个字符串,包含左圆括号"("、右圆括号")"、左方括号"[" 和右方括号"]"。编写一个函数,该函数应返回一个数字,表示字符串中第一个不平衡的括号的位置。如果字符串中没有不平衡的括号,则返回 -1。

例如,对于输入字符串 "([][)]",函数应该返回 3,因为第一个未匹配的右圆括号出现在该字符串的第3个位置。

解决方案

本题可以使用栈来解决。我们可以从左到右遍历输入字符串,遇到左括号时将其压入栈中,遇到和栈顶括号匹配的右括号时,则将栈顶括号弹出。如果遇到不能匹配的右括号,则表示字符串中有不平衡的括号,返回该括号的位置。如果字符串遍历完后栈非空,则表示字符串中有不平衡的括号,返回最后一个未匹配左括号的位置。

以下是Python实现:

def find_unbalanced_position(s):
    stack = []
    for i, c in enumerate(s):
        if c in "([{":
            stack.append((c, i))
        elif c in ")]}":
            if not stack:
                return i
            top, _ = stack.pop()
            if (c == ")" and top != "(") or \
               (c == "]" and top != "[") or \
               (c == "}" and top != "{"):
                return i
    if stack:
        return stack[-1][1]
    else:
        return -1

以上代码中,我们使用了一个元组来保存栈中元素的值和位置信息。在遍历输入字符串时,如果遇到左括号,则将其入栈。如果遇到右括号,则检查栈顶元素是否与其匹配。如果不匹配,则返回该右括号的位置。如果字符串遍历完后栈非空,则返回最后一个未匹配的左括号的位置。如果没有不平衡的括号,则返回 -1。

总结

本文介绍了如何使用栈来解决找到括号不平衡的位置的问题。此类问题在程序开发中非常常见,掌握此类问题的解决方法对于程序员来说是非常重要的。如果你打算参加InfyTQ或其他技术比赛,掌握这个问题的解决方法也会对你的比赛有所帮助。