使用递归二分算法检查字符是否在字符串中

2023-12-07

我目前正在 edx 上学习编程课程,我的说明如下: 使用二分搜索的思想,编写一个递归算法,检查字符串中是否包含字符,只要字符串按字母顺序排列即可。 我的代码(python 2.7)在这里:

def isitIn(char, aStr):
   m = aStr[len(aStr) // 2]
   if aStr == '' or len(aStr) == 1 or char == m:
      return False
   else:
      if char < m:
         return isitIn(char, aStr[:-1])
      elif char > m:
         return isitIn(char, aStr[1:])
   return isitIn(char, aStr)

我的解释: 我首先找到字符串的中间字符。如果等于该字符,则返回 False。如果不等于该字符,则继续检查该字符是否低于中间字符,然后使用递归函数创建堆栈,最终返回布尔值True。现在我使用 -1 和 1 索引,因为我不想包含中间字符。

我宁愿得到提示,而不是解决方案,因为我仍在试图找出答案,但不同的观点总没有坏处。谢谢!

Error message:
Test: isIn('a', '')
Your output:
Traceback (most recent call last):
File "submission.py", line 10, in isIn
m = aStr[len(aStr) // 2]
IndexError: string index out of range
Correct output:
False

函数是一去不复返True。我认为它应该返回True when char == m,所以你可以将其从if-clause(即返回False)并将其放入另一个if:

if char == m:
   return True
elif aStr == '' or len(aStr) == 1:
    return False
else:
    ...

另外,你正在打电话isIn未定义的方法。我想你想递归调用isitIn.

比较后char < m and char > m你应该"bisect"字符串,所以不要这样做return isitIn(char, aStr[:-1]) nor return isIn(char, aStr[1:]),而是传递(在递归调用中)字符串的“一半”。

if char < m:
    return isitIn(char, aStr[:len(aStr) // 2])
elif char > m:
    return isitIn(char, aStr[len(aStr) // 2:])

Edit:以防万一,我尝试过的代码是:

def isitIn(char, aStr):
    if aStr == '':  # Check for empty string
        return False
    m = aStr[len(aStr) // 2]
    if char == m:
       return True
    elif len(aStr) == 1:
        return False
    else:
       if char < m:
           return isitIn(char, aStr[:len(aStr) // 2])
       elif char > m:
           return isitIn(char, aStr[len(aStr) // 2:])
    return isitIn(char, aStr)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用递归二分算法检查字符是否在字符串中 的相关文章

随机推荐

  • 对列表进行子集化(为所有组件选择匹配值)

    我尝试以某种方式从列表中读出某些元素 这相当于df c 1 4 5 in a data frame gt obj lt list c 1 5 c 1 5 gt obj 1 1 1 2 3 4 5 2 1 1 2 3 4 5 我正在寻找这样的
  • 为什么ACTION_MEDIA_BUTTON无法处理事件?

    遵循有关如何进行的培训部分使用硬件播放控制键来控制音频播放 我创建一个监听器类 public class RemoteControlReceiver extends BroadcastReceiver Override public voi
  • CMake:对 boost 库的未定义引用

    我通过这个添加了提升 set Boost USE STATIC LIBS ON set Boost USE MULTITHREADED ON set Boost USE STATIC RUNTIME OFF find package Boo
  • 我一直搞砸 1NF

    对我来说 到目前为止我发现的关于 1NF 最容易理解的描述是 主键是唯一标识每一行的一列 或一组列 在 www phlonx com 上 据我所知 冗余意味着每个键每行的值不应超过 1 个 超过 1 的值将是 冗余的 正确的 尽管如此 我还
  • Javascript Array.sort 实现?

    JavaScript 使用哪种算法Array sort 功能使用 我知道它可以采用各种方式的参数和函数来执行不同类型的排序 我只是对普通排序使用哪种算法感兴趣 我刚刚浏览了 WebKit Chrome Safari source 根据数组的
  • Java:空间对编译有影响吗?

    我正在制作一个程序 有点像 Piglatin 其中我无意中错过了语句中的一个变量 String a R a 其实应该是String a R text a 编译器产生了一个错误 但是 当我做到了 String a R a 程序编译完成 我想知
  • 需要在导航抽屉内显示可扩展列表视图

    I am an Android Application Developer I have started working on React Native I am unable to find a way to show expandabl
  • ASP.NET MVC 5 身份 userManager.IsInRole

    以下代码不起作用 我无法解释为什么 我的用户管理器造成了很大的困扰 因为它创建用户和角色很好 但是当我运行此代码时 userManager IsInRole 总是返回 false 所以第二个当我运行我的种子时 我遇到了错误 因为它试图创建记
  • Zend Framework 2 库路径

    当我试图尝试 ZF2 时 我偶然发现了我的第一个问题 在模块上说我想使用 Shanty Mongo 连接到 MongoDb 的外部库 因此 我复制了库上的整个 Shanty 目录并创建了一个新的 Model 类 namespace Dumm
  • AsyncTask不能在android线程中工作

    我使用 AsyncTask 来更改 TextView 的文本 如下所示 private class LongOperation extends AsyncTask
  • Twisted:重新连接ClientFactory连接到不同的服务器

    我有一个扭曲的 ReconnectingClientFactory 我可以通过该工厂成功连接到给定的 ip 和端口 而且效果很好 reactor connectTCP ip 端口 myHandsomeReconnectingClientFa
  • 如何找到与我的代码兼容的所有以前版本的 python

    我在 python 2 7 3 中创建了一个中型项目 包含大约 100 个模块 我希望找出我的代码与哪些以前版本的 python 例如 2 6 x 2 7 x 兼容 在公共领域发布我的项目之前 找到它的最简单方法是什么 我知道的解决方案 安
  • 使用索引作为键初始化对象数组[重复]

    这个问题在这里已经有答案了 我试图找出如何初始化一个对象数组 其中每个对象都以索引 i 作为其键 以 0 作为其值 下面的代码没有按预期工作 但我不明白为什么 我还是 Javascript 的初学者 在其他地方找不到答案 var n 10
  • 带有 Dagger Hilt 的 Android 动态功能模块

    我已经构建了一个动态功能模块示例 其中包含基于格子应用程序的片段 子组件和依赖组件 如果您想查看here是链接 现在 我正在尝试使用将其转换为 Dagger Hilt安卓官方文档 在核心模块中 即库模块 应用程序模块和动态功能模块依赖于 S
  • Kotlin 无法在 Android Studio 上运行

    所有 kotlin 文件都无法在我的 Android Studio 上显示 即使直接将java文件转换为koltin 也可以对其进行编辑 但它不会出现在项目文件树上 IDE 还表明它是反编译的 class 文件 我无法创建 Kotlin 文
  • 如何过滤除特定白名单之外的所有 HTML 标签?

    这是针对 NET 的 设置了 IgnoreCase 但未设置 MultiLine 通常我在正则表达式方面表现不错 也许我的咖啡因不足 用户可以输入 HTML 编码的实体 u i b h3 h4 br a img 允许自动关闭 和 无论有或没
  • 无法使用点布局(graphviz 作为库)

    我使用 graphviz v2 28 0 作为 C 应用程序中的库 并且我想使用点布局渲染图形 一切正常 直到我打电话给gvLayout context graph 点 输出以下错误的函数 Error Layout type dot not
  • Pygame 三角函数:跟随斜边?

    我的方法里有一个方法Enemy类称为huntPlayer 它需要一个玩家对象p 这里是 def huntPlayer self p if self dist2p lt 200 self hunting True if p x gt self
  • 将“排名”列添加到数据框中

    我有一个数据框 其中包含不同年份的不同项目的数量 df lt data frame item rep c a b c 3 year rep c 2010 2011 2012 each 3 count c 1 4 6 3 8 3 5 7 9
  • 使用递归二分算法检查字符是否在字符串中

    我目前正在 edx 上学习编程课程 我的说明如下 使用二分搜索的思想 编写一个递归算法 检查字符串中是否包含字符 只要字符串按字母顺序排列即可 我的代码 python 2 7 在这里 def isitIn char aStr m aStr