【问题标题】:Parenthesis Balancing Algorithm recursion [closed]括号平衡算法递归
【发布时间】:2013-11-18 01:45:10
【问题描述】:

有人可以向我解释一下括号平衡问题的算法吗?

“由于匹配括号对,字符串(代码)语法是否正确?”

除了每个“(”应该有另一个“)”让算法返回 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)
 }

【问题讨论】:

    标签: scala recursion


    【解决方案1】:

    此代码通过在没有第一个元素的字符串上调用 balanced() 递归检查字符串是否包含匹配数量的左括号和右括号。

    字符串中括号的期望值保存在一种余额指示器中open - 正数表示需要的数量')',负数表示需要的数量'('。初始余额为0。

    当递归到达字符串末尾时,它会检查余额是否正常(open == 0),例如看到匹配数量的括号。

    还有一个检查 (open > 0) 以确保在有 '(' 它可以关闭之前没有遇到 ')'。

    【讨论】:

    • 最后一件事...在这一行中: if (chars.head == ')') open>0 && balance(chars.tail,open-1) 两者之后的 && 怎么样条件,它仍然有效?和 if(chars.head == ')') && open > 0 balance(chars.tail,open-1) 一样吗?
    • if (chars.head == ')') { open>0 && balance(chars.tail,open-1)} => if (boolean) {boolean && boolean}
    • On if 函数返回布尔值 A 和 B 的 AND (&&) 结果。A) balance 表示有未关闭的 '(' 之前可以被当前的 ')' 关闭B)弦的其余部分是平衡的。 “平衡”的概念你清楚吗?
    • 是的,我明白他所说的平衡是什么意思。但是我不明白有“)”的情况,即这两行:else if (chars.head == ')') open>0 && balance(chars.tail,open-1) else balance(chars.尾巴,打开)
    • 现在我明白了!感谢您的耐心等待,但我是 scala 的新手。就这一点,我承诺 else balance(chars.tail,open) ,这条线什么时候执行?如果没有(或)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2011-02-12
    • 2012-09-14
    相关资源
    最近更新 更多