当前位置: 首页 > 知识库问答 >
问题:

包含“bab”的布尔函数

吕霍英
2023-03-14

我怎么可能有一个递归布尔方法来检查它是否包含BAB。我有这个,但我想做它递归。

public static boolean hasBAB(String str) {
      if (str.length() < 3) return false;
      if (str.substring(0,3).equals("bab"))
        return true;
      else
        return false;
    }

共有1个答案

郎鸿朗
2023-03-14

递归应该被认为是两个部分。

1)一个基本情况。这是一个很简单的情况,很容易确定。到目前为止,这是一个基本情况的良好开端。1)字符串是否小于3?然后返回false。2)字符串是否以“bab”开头,然后返回true。

2)一个递归案例。这将问题分解成一个更小的问题,如果你把它们分解得足够多,你就有了一个基本案例。

public static boolean hasBAB(String str) {
  if (str.length() < 3) return false;
  if (str.substring(0,3).equals("bab"))
    return true;
  else
    return hasBAB(str.substring(1));
}

这将使用基本案例,并作为递归案例检查从索引1开始的字符串。这只减少了我们的字符串一个宪章,但足以解决问题。

这意味着我们最终得到字符串长度的堆栈级别。

我们能做得更好吗?一点,通过将问题分解一半,我们只需要一个ln(n)的堆栈级别,其中n是字符串的长度。对于大多数长度来说,这并不是一个大问题,但是如果您搜索的字符串长度为100万,那么它可能很重要。与第一个版本,我们的堆栈将是大约100万深!但是对于这个二进制版本,我们只需要深入到大约14层。

这里是这个算法的一个例子,你可以用你喜欢的任何字符串替换“bab”,尽管它还没有经过充分的测试,我很肯定它会好的。

public static boolean hasBAB(String str) {
      String searchString = "bab";

      // Base cases
      if (str.length() < searchString.length()) 
          return false;

      if (str.length() == searchString.length())
      {
          if (str.equals(searchString))
          {
              return true;
          }
          return false;
      }

      int halfWay = str.length()/2;

      // Now check for the search string over the "break"
      for (int i = 0; i < searchString.length(); i++)
      {
          int startIndex = halfWay - 1 - i;
          int endIndex = startIndex + 3;
          if (startIndex >= 0)
          {
              String substring = str.substring(startIndex, endIndex);
              if (substring.equals(searchString))
              {
                  return true;
              }
          }
      }

     // Recursive Cases 
     //  We did find the search string over the break,so break the string into two equal(ish) pieces and check those 
     if(hasBAB(str.substring(0,halfWay -1)))
         return true;

     if(hasBAB(str.substring(halfWay, str.length())))
         return true;

     return false;
}
 类似资料:
  • 这就是我正在研究的问题:“给定一个整数数组,是否可以选择一个整数组,使得这个组和给定的目标有这些附加的约束条件:数组中所有5的倍数都必须包含在组中。如果紧接在5倍数后面的值是1,就不能选择它。(不需要循环。)” 我尝试了以下操作: 但它只得到5的倍数,我试过: 但它不起作用,因为有时5的倍数不包括在内。 我知道我的代码还没有完成第二个约束。 有什么想法吗?

  • 问题内容: 这是一个愚蠢的问题,但是自从我使用Java以来​​已经有很长的时间了……我该如何用布尔值编写构造函数,还是应该编写默认构造函数?我最近一直在使用C ++,但是我忘记了Java的很多语法。 这是我到目前为止所拥有的: 搜索时似乎找不到任何东西…如何初始化构造函数中的每个值?还是我应该 我也有几个继承自这个类的类,所以我不确定这是否有所作为。 问题答案: 布尔参数与其他任何类型一样。 因此

  • 本文向大家介绍JavaScript的布尔函数?,包括了JavaScript的布尔函数?的使用技巧和注意事项,需要的朋友参考一下 布尔函数 在开发过程中,开发人员可能会遇到是/否的情况。那时可以使用Boolean()函数。它只会导致true或false。让我们详细讨论它。 语法 它接受一个表达式并对其进行仔细检查,并根据表达式的有效性显示true或false。 示例1 在下面的示例中,使用Boole

  • 和返回其他任何类型一样,函数也能返回布尔值,将复杂的条件测试隐藏在函数中非常方便。例如: bool isSingleDigit (int x) { if (x >= 0 && x < 10) { return true; } else { return false; } } 函数名是isSingleDigit。布尔函数常见的命名方式是,让名字听起来像是在提问题,回答是

  • 问题内容: 我有一个的条目: 目前,我正在检查它是否包含真像这样: 这是检查布尔数组的 最快 方法吗?如果不是,执行此检查的最快方法是什么? 编辑: 通过在Android 4.03 Samsung S2设备上将其作为应用程序运行,我对您的答案中的方法进行了计时,如下所示: 在五次跑步中的时间排名最高,排名第一: 在5334和11584 ns之间: } return false; 在160542和1

  • c (当用于布尔值时) 该内建函数从 FreeMarker 2.3.20 版本开始存在 该内建函数将布尔值转换为字符串,针对 "计算机语言" 而不是用户。不管 boolean_format 的设置是什么, 结果是 "true" 或 "false"。 当生成JavaScript的时候,应该会用到它,否则修改 boolean_format 的话可以打断生成的计算机语言输出。 请注意,该内建函数 对字符