Java 递归验证字符串是否为有效的前缀表达式?

Java 递归验证字符串是否为有效的前缀表达式?,java,string,recursion,prefix,Java,String,Recursion,Prefix,我是这个社区的新手,但我在这里看到了一些有用的帖子,所以我想我应该问问 我有一个家庭作业问题,要求我们递归地检查给定字符串是否是以下两个规则(标准)给出的有效前缀表达式: 变量(a-z)是前缀表达式 如果O是二进制运算符,F和E是前缀表达式,则OFE 现在,我得到了一种评估,并且已经研究了中缀算法的前缀,但是我一辈子都不知道如何实现评估方法(因为我只需要检查它是否有效,所以不是+a-b) 我知道这些问题的大部分实现都是使用堆栈完成的,但我不知道在这里如何递归地实现。。。如果能得到一些帮助,我们将

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

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

  • 变量(a-z)是前缀表达式
  • 如果O是二进制运算符,F和E是前缀表达式,则OFE
  • 现在,我得到了一种评估,并且已经研究了中缀算法的前缀,但是我一辈子都不知道如何实现评估方法(因为我只需要检查它是否有效,所以不是+a-b)

    我知道这些问题的大部分实现都是使用堆栈完成的,但我不知道在这里如何递归地实现。。。如果能得到一些帮助,我们将不胜感激。

    这样想吧。(我不打算编写代码,因为这是您需要学习的内容)

    您想检查某个字符串是否是前缀表达式,因此您有一个函数:

    boolean isPrefix(string)
    
    现在,字符串有两种方式可以作为前缀:

  • 这是一个来自a-z的角色
  • 它的格式是O(前缀)(前缀)
  • 首先,检查字符串的长度是否在a-z之间,如果是,答案是肯定的

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

    因此,您开始从1迭代到length,并将每个子字符串(0->i,i->length)传递到isPrefix()。如果两个子字符串都是有效的前缀表达式,则答案为“是”

    否则,答案是否定的


    基本上就是这样,但是具体实现取决于您。

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

    的子字符串,这是指表达式的前缀符号(),而不是文字前缀。谢谢,这篇文章写得非常好,我也在责怪自己没有像之前那样思考它(尽管这是一种蛮力的方法,我们的教授对效率非常挑剔……尽管对于这个特殊的问题,我会忽略这一点)。尽管听起来很烦人,但是,尽管我已经实现了一些在纸上检查的东西,但似乎有一个我无法发现的小错误。下面是代码片段:我明白您是否有更好的事情要做,同时我将继续调试。@uer991710在第一个if周围加上大括号,您的else{}语句绑定到
    if(in.equals(vars[I])
    而不是'if(in.length()==1)`。我强烈建议在IDE中启用代码格式化,因为这样会更容易检测。我真不敢相信我错过了。我试图保存几行,但肯定忘记了else只适用于最近的if。我最近一直在读一些Python,所以我一定是因为缩进而大脑放屁了。然而,关于格式问题,我们提出了一点看法。非常感谢。