Java 通过递归解决此问题的任何其他较短方法
假设您有一个仅由“a”和“b”组成的字符串。编写一个递归函数,检查字符串是否使用以下规则生成: 1.字符串以“a”开头 2.每个“a”后面都跟不上任何内容或“a”或bb 3.每个bb后面都跟不上任何内容或“a” 如果所有规则后面都有给定的字符串,则返回true,否则返回falseJava 通过递归解决此问题的任何其他较短方法,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) {
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海洋,自己学习游泳。这很公平。我只是想告诉你,如果你花更多的时间来提高答案的质量,你会得到更多的投票。现在好了,让我投票吧。