scala – 如何递归地平衡括号
发布时间:2020-12-16 18:27:39 所属栏目:安全 来源:网络整理
导读:我正在研究一些代码来平衡括号,this question证明对算法最有用. 我用我的第一语言(PHP)实现它,但我正在学习Scala并尝试转换代码. 这是我的PHP代码: function balanced($string) { return isBalanced($string,"");}function isBalanced($chars,$stack) { if
我正在研究一些代码来平衡括号,this question证明对算法最有用.
我用我的第一语言(PHP)实现它,但我正在学习Scala并尝试转换代码. 这是我的PHP代码: function balanced($string) { return isBalanced($string,""); } function isBalanced($chars,$stack) { if (!strlen($chars)) return empty($stack); switch ($chars[0]) { case '(': // prepend stack with '(',move to next character return isBalanced(substr($chars,1),$chars[0] . $stack); case ')': // if '(' seen previously,shift stack,move to next character return !empty($stack) && isBalanced(substr($chars,substr($stack,1)); default: // do nothing to stack,$stack); } } 我测试了这个,它有效.但是,当我将其转换为Scala时,它在平衡字符串上失败. 我的Scala代码: object Main { def balance(chars: List[Char]): Boolean = { def balanced(chars: List[Char],stack: String): Boolean = { if (chars.isEmpty) stack.isEmpty else if (chars.head == ')') balanced(chars.tail,chars.head + stack) else if (chars.head == '(') !stack.isEmpty && balanced(chars.tail,stack.tail) else balanced(chars.tail,stack) } balanced(chars,"") } } 我很欣赏这不是最好的Scala代码,但我刚刚开始.一些测试: balance("(if (0) false (x))".toList) - fails balance("profit and loss (P&L).n(cashflow)".toList) - fails balance(":)".toList) - passes balance(")(()".toList) - passes PHP等价物通过了所有这些测试.我在Scala实现中做错了什么? 解决方法
你混淆了(和)的案例.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |