Java 通过递归解决此问题的任何其他较短方法

Java 通过递归解决此问题的任何其他较短方法,java,recursion,Java,Recursion,假设您有一个仅由“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) {

假设您有一个仅由“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"));
    }

}

我提出这个模式: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)?")) ;
    }
}
比如:

 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;
    }
}

它真的需要递归吗?我很确定你可以用正则表达式来实现。请投入更多的时间来制定高质量的答案。看见至少,展示一些关于如何使用它的最少Java代码,并解释它实际上是什么。OP可能从来没有听说过什么是正则表达式。@Zabuza你是对的:OP可能从来没有听说过正则表达式。这就是为什么我贴了一条评论,鼓励他潜入regex海洋,自己学习游泳。这很公平。我只是想告诉你,如果你花更多的时间来提高答案的质量,你会得到更多的投票。现在好了,让我投票吧。