【发布时间】:2016-04-22 21:09:58
【问题描述】:
我们都知道常规的平衡括号算法,它在这里出现了许多变体,但我有另一个转折。
我知道如何使用堆栈或不使用堆栈来回答它,并且我已经阅读了所有与此问题相关的线程,以及在谷歌上,但我没有找到任何与我的问题相匹配的答案。
让我们发明一种不同的数学,而不是 '()'、'{}'、'[]' 我们使用 '**'、'$$'、'##'。现在展示一个算法来检查wheatear括号是否平衡。
例如:*##$$##*** 是合法的,相当于 ([[{}]])() 甚至 ([]{})。 如果它是真正的数学,它可能不是最好的不同符号意味着不同的东西,但它不是数学所处理的......
我尝试使用“常规”符号的解决方案并对其进行调整以使用这些新符号,但现在我失败了。问题当然是我们无法区分打开和关闭符号。任何人都可以提出解决方案吗?
这是在面试中作为问题之一给我的,而在此之前我用常规符号解决了它。没关系,但我被要求使用 Java 回答。
【问题讨论】:
-
这似乎是“常规”符号问题的一个更简单的情况 - 当当前符号与堆栈的头部相同时,您将其从堆栈中弹出(即将当前符号视为右括号),否则将符号添加到堆栈中(即,将其视为左括号)。输入完成后堆栈必须为空。
-
(()) --> ****和()() --> ****将具有相同的表示形式。所以你不能把它转换成旧的表示,但你可以检查输入是否至少有一个有效的表示。 -
我没有正确的答案,但我开始认为我被欺骗了认为它会更复杂