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

时间:2011-10-12 15:15:26

标签: java string recursion prefix

我对社区很陌生,但我在这里看到了一些有用的帖子,所以我想我会问。

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

  1. 变量(a-z)是前缀表达式
  2. 如果O是二元运算符,F和E是前缀表达式,OFE
  3. 现在,我得到了评估,并查看了前缀到中缀算法,但我不能在我的生活中弄清楚如何只实现评估方法(因为我只需要检查是否它是有效的,所以不是+ ab例如)。

    我知道这些问题的大多数实现是使用堆栈完成的,但是我不知道如何在这里递归地执行它...一些帮助将非常受欢迎。

2 个答案:

答案 0 :(得分:3)

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

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

boolean isPrefix(string)

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

  1. 这是a-z
  2. 中的角色
  3. 格式为O(前缀)(前缀)
  4. 首先,检查字符串的长度是否为1,介于a-z之间,如果是,答案是肯定的。

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

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

    否则,答案是否定的。

    这几乎就是它,但是实施取决于你。

答案 1 :(得分:0)

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