我们都知道常规的平衡括号算法,它出现在很多变化中,但我有另一种扭曲。
我知道如何使用或没有堆栈来回答它,我已经阅读了所有与此问题相关的线程,并在谷歌上但我没有找到任何与我的问题相符的答案。
让我们发明一种不同的数学,而不是'()','{}','[]'我们使用'**','$$','##'。现在显示一个算法来检查括号是否平衡。
例如:* ## $$ ## ***是合法的,相当于([[{}]])()或甚至([] {})。 如果它是真正的数学,它可能不是最好的不同符号意味着不同的东西,但它不是数学处理......
我尝试使用'常规'符号的解决方案并调整它以使用这个新符号但是现在我失败了。问题当然是我们无法分辨开关符号。有人可以提出解决方案吗?
这是作为求职面试中的一个问题给我的,而在此之前我用常规符号解决了这个问题。并不重要,但我被要求使用Java回答。
答案 0 :(得分:2)
只要你在堆叠顶部有匹配,你就可以贪婪并弹出。
def is_valid(string):
stack = []
for char in string:
if stack and char == stack[-1]:
stack.pop()
else:
stack.push(char)
return not stack