有人可以向我解释括号平衡问题的算法吗?
“由于括号匹配,字符串(代码)语法是否正确?”
除了每个“(”应该有另一个“)”以使算法返回true之外,我无法弄明白。
谢谢!
我找到了这个解决方案,但我不理解它,我不想复制并粘贴它:
def balance(chars: List[Char]): Boolean = {
def balanced(chars: List[Char], open: Int): Boolean = {
if (chars.isEmpty) open == 0
else
if (chars.head == '(') balanced(chars.tail,open+1)
else
if (chars.head == ')') open>0 && balanced(chars.tail,open-1)
else balanced(chars.tail,open)
}
balanced(chars,0)
}
答案 0 :(得分:15)
此代码通过在没有第一个元素的字符串上调用 balanced()来递归检查字符串是否包含匹配的左括号和右括号。
字符串中括号的预期值保持在一种平衡指标打开 - 正数表示所需数量')'和负数所需数量'('。初始余额为0。
当递归到达字符串的结尾时,它检查余额是否正常(open == 0),例如看到了匹配的括号数量。
还有一个检查(打开> 0)以确保在'('它可以关闭之前'没有遇到')'。