我以前编写的软件使用堆栈来检查平衡方程,但现在我被要求递归地编写一个类似的算法来检查正确的嵌套括号和括号.
好例子:()[]()([]()[])
不好的例子:((]([)]
假设我的函数被调用:isBalanced.
每次传递都应该评估一个较小的子串(直到达到2的基本情况)?或者,我应该总是评估完整的字符串并向内移动索引吗?
我开始使用scala,并尝试应用功能方式,但我出来了一堆嵌套if\else结构很难读,我想知道有更好的方法来编程这样的东西?例如,我写了脚本,执行括号平衡
def balance(chars: List[Char]): Boolean = {
def checkParentesys(chars: List[Char], parentesis: List[Char]): Boolean =
if (chars.isEmpty && parentesis.isEmpty)
true
else
if (chars.head == '(')
checkParentesys(chars.tail, '(' :: parentesis)
else
if (parentesis.isEmpty)
false
else
checkParentesys(chars.tail, parentesis.tail)
checkParentesys(chars.filter(s => s == '(' || s == ')'), List())
}
Run Code Online (Sandbox Code Playgroud)
你能建议,我怎样才能把它写得更实用,更像scala?