【问题标题】:Any other shorter way to solve this problem through recursion通过递归解决此问题的任何其他更短的方法
【发布时间】:2020-01-25 17:07:30
【问题描述】:

假设您有一个仅由“a”和“b”组成的字符串。编写一个递归函数,检查字符串是否使用以下规则生成: 1.字符串以'a'开头 2.每个'a'后面都没有或'a'或“bb” 3. 每个“bb”后面都没有或一个“a” 如果所有规则都遵循给定的字符串,则返回 true,否则返回 false。

public class temp {

    public static boolean checkAB(String input) {
        if (input.length() == 1) {
            if (input.charAt(0) == 'a')
                return true;
            else
                return false;
        }


        Boolean ans = checkAB(input.substring(0, input.length() - 1));
        if (ans == false)
            return ans;
        else {
            if (input.charAt(input.length() - 2) == 'a') {
                if (input.charAt(input.length() - 1) == 'a' || input.charAt(input.length() - 1) == 'b')
                    return true;
                else
                    return false;
            }
            if (input.charAt(input.length() - 2) == 'b') {
                if (input.charAt(input.length() - 3) == 'a') {
                    if (input.charAt(input.length() - 1) == 'b') {
                        return true;

                    } else
                        return false;
                }
                if (input.charAt(input.length() - 3) == 'b') {
                    if (input.charAt(input.length() - 1) == 'a') {
                        return true;

                    } else
                        return false;
                }


            } else
                return false;


        }
        return false;
    }
    public static void main(String args[]){
        System.out.println(checkAB("abbbabaaa"));
    }

}

【问题讨论】:

  • 真的需要递归吗?
  • 我很确定你可以用正则表达式来做到这一点。

标签: java recursion


【解决方案1】:

我建议这种模式:“a+(bba+)*(bb)?”

public class ABB
{
    public static void main(String[] args)
    {
        for (String arg : args)
            checkAB(arg) ;
    }

    static void checkAB(String s)
    {
        System.out.printf("%s -> %b\n", s, s.matches("a+(bba+)*(bb)?")) ;
    }
}

【讨论】:

  • 请投入更多时间来制定高质量的答案。见How to Answer。至少,展示一些关于如何使用它的最小 Java 代码并解释它实际上是什么。 OP 可能从未听说过什么是正则表达式。
  • @Zabuza 你是对的:OP 可能从未听说过正则表达式。这就是我发表评论的原因,鼓励他潜入正则表达式的海洋并学会自己游泳。
  • 很公平。只是想告诉您,如果您投入更多时间来提高答案的质量,您将获得更多的赞成票。现在更好了,请给我投票。
【解决方案2】:

类似:

 public boolean isValid(String str) {
    if (str.startsWith("a")) {
        final String substring = str.substring(1);
        return (substring.startsWith("a") || substring.startsWith("bb")) ? isValid(substring) : substring.isEmpty();

    } else if (str.startsWith("bb")) {
        final String substring = str.substring(2);
        return (substring.startsWith("a")) ? isValid(substring) : substring.isEmpty();

    } else {
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2011-08-15
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多