Java 不同符号的平衡括号算法

Java 不同符号的平衡括号算法,java,python,algorithm,Java,Python,Algorithm,我们都知道正则平衡括号算法,它在这里有很多变体,但我有另一个扭曲 我知道如何回答这个问题,不管有没有堆栈,我在这里和谷歌上阅读了所有与这个问题相关的帖子,但我没有找到任何与我的问题相匹配的答案 让我们发明一种不同的数学,而不是“()”、“{}”、“[]”我们使用“**”、“$$”和“##”。现在显示一个检查小麦圆括号是否平衡的算法 例如:*##$$##***是合法的,相当于([[{}]])()甚至([[{}])。 这可能不是最好的不同的符号意味着不同的东西,如果它是真正的数学,但它不是数学处理

我们都知道正则平衡括号算法,它在这里有很多变体,但我有另一个扭曲

我知道如何回答这个问题,不管有没有堆栈,我在这里和谷歌上阅读了所有与这个问题相关的帖子,但我没有找到任何与我的问题相匹配的答案

让我们发明一种不同的数学,而不是“()”、“{}”、“[]”我们使用“**”、“$$”和“##”。现在显示一个检查小麦圆括号是否平衡的算法

例如:*##$$##***是合法的,相当于([[{}]])()甚至([[{}])。 这可能不是最好的不同的符号意味着不同的东西,如果它是真正的数学,但它不是数学处理

我尝试使用“常规”符号的解决方案,并对其进行调整以适应新符号,但目前我失败了。问题当然是我们无法区分开始符号和结束符号。有人能提出解决办法吗


这是在一次求职面试中给我的一个问题,而在此之前,我用常规符号解决了这个问题。这并不重要,但我被要求用Java来回答。

只要在堆栈顶部有匹配项,你就可以贪婪地弹出

def is_valid(string):
    stack = []
    for char in string:
        if stack and char == stack[-1]:
            stack.pop()
        else:
            stack.push(char)
    return not stack

这似乎是“常规”符号问题的一个更简单的例子——当当前符号与堆栈的头部相同时,将其从堆栈中弹出(即将当前符号视为右括号),否则将符号添加到堆栈中(即将其视为左括号)。输入完成时,堆栈必须为空。
(())-->******
()()-->***
的表示形式相同。所以你不能把它转换成一个旧的表示法,但是你可以检查输入是否至少有一个有效的表示法。我没有正确的答案,但我开始觉得我被骗了,以为它会更复杂