【问题标题】:Recursively verifying if a string is a valid prefix expression?递归验证字符串是否是有效的前缀表达式?
【发布时间】:2011-12-06 05:45:06
【问题描述】:

我是社区的新手,但我在这里看到了一些有用的帖子,所以我想问一下。

我有一个作业问题,要求我们递归检查给定字符串是否是以下两个规则(标准)给出的有效前缀表达式:

  1. 变量 (a-z) 是前缀表达式
  2. 如果 O 是二元运算符并且 F 和 E 是前缀表达式,则 OFE

现在,我得到了评估,并查看了从前缀到中缀的算法,但我一生都无法弄清楚如何仅实现评估方法(因为我只需要检查是否它是有效的,所以不是 +ab 例如)。

我知道这些问题的大部分实现都是使用堆栈完成的,但我不知道我将如何在这里递归地完成它......非常感谢一些帮助。

【问题讨论】:

    标签: java string recursion prefix


    【解决方案1】:

    这样想。 (我不打算写代码,因为那是你需要学习的)。

    你想检查某个字符串是否是前缀表达式,所以你有一个函数:

    boolean isPrefix(string)
    

    现在,字符串可以作为前缀有两种方式:

    1. 是 a-z 中的一个字符
    2. 格式为 O(prefix)(prefix)

    首先,检查字符串的长度是否为 1 并且在 a-z 之间,如果是,则答案是肯定的。

    接下来可以检查字符串是否以 O 开头。如果是,则需要测试字符串的其余部分是否由两个前缀表达式 (FE) 组成。

    所以你开始从 1 迭代到 length,并将每个子字符串 (0->i, i->length) 传递给 isPrefix()。如果两个子字符串也是有效的前缀表达式,则答案是肯定的。

    否则,答案是否定的。

    差不多就这些了,但是具体实施取决于您。

    【讨论】:

    • 谢谢你,写得非常好,我很自责,因为我之前没有这么想(虽然这是一种蛮力方法,我们的教授对效率非常挑剔......虽然对于这个特殊问题,我将不予理会)。然而,以听起来很烦人为代价,虽然我已经实现了一些可以在纸上检查的东西,但似乎有一个我无法发现的小错误。这是代码sn-p:pastebin.com/Lk5mHM7R我明白如果你显然有更好的事情要做,我会在此期间继续调试。
    • @uer991710 在你的第一个 if 周围加上大括号,你的 else{} 语句绑定到 if(in.equals(vars[i])) 而不是 `if(in.length() == 1)`。我强烈建议在您的 IDE 中启用代码格式化,因为它会更容易检测到。
    • 我不敢相信我错过了。我试图保存几行,但一定忘记了 else 仅适用于那里最近的“if”。我最近一直在读一些 Python,所以我一定对缩进有过脑子。然而,关于格式的观点。谢谢。
    【解决方案2】:

    我不确定我是否完全理解这一点,但我想你应该有一些像checkPrefixIn(String s) 这样的方法,它只查看给定String 的一部分,如果它只是一个前缀,则返回true , false 如果它只是一个运算符(或无效字符),或者checkPrefixIn(partOfS) 的返回值,其中partOfS 是输入s 的子字符串

    【讨论】:

    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2012-02-02
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多