【发布时间】:2018-06-10 10:04:38
【问题描述】:
我正在运行一个代码来平衡语句中的括号。我想我已经猜对了,但它在一个特定的陈述上失败了,我需要了解为什么?
这是特别失败的测试“())(”
我认为我需要修复算法的不仅仅是编码,还有任何指针吗?
def balance(chars: List[Char]): Boolean = {
def find(c: Char, l: List[Char], i: Int): Int={
if( l.isEmpty ) {
if(c=='(')
i+1
else if(c==')')
i-1
else
i
}
else if (c=='(')
find(l.head, l.tail, i+1)
else if(c==')')
find(l.head,l.tail, i-1)
else
find(l.head,l.tail, i)
}
if(find(chars.head, chars.tail,0) ==0 )
true
else
false
}
balance("())(".toList) //passes when it should fail
balance(":-)".toList)
balance("(if (zero? x) max (/ 1 x))".toList)
balance("I told him (that it's not (yet) done).\n(But he wasn't listening)".toList)
【问题讨论】:
-
此模式
")("以)开头,这意味着您的i值变为负数,这是不允许的,但您永远不会测试i值,除非最后,在最终的(将其归零之后。 -
另外,Coursera。这个想法是你自己调试你的问题,你可以通过这种方式了解更多