为了账号安全,请及时绑定邮箱和手机立即绑定

能够递归搜索文本中的字符串的代码

能够递归搜索文本中的字符串的代码

交互式爱情 2022-07-19 16:56:19
我有一个满足上述问题的代码。但是,我个人很好奇如何对其进行重新编码,以便如果文本没有空格并且给出为"LoveIsWar",则如果字符串为 ,代码仍将返回 true "War"。但是,我想逐个字母地检查,但我不确定该怎么做。如果我能得到这方面的指导,我将不胜感激!def find(text, substring):    if(len(text) <= 0):        return None    elif(text[0] == substring):        return substring    else:        return find(text[1:], substring)def is_string_there(text, string):    if find(text.split(), string):        return True    else: return Falseprint(is_string_there("love is war","war"))print(is_string_there("love is war","warfalse"))这是满足我想要的一切的编辑代码。即使字符串中包含大写字母,也能够检查文本是否包含空格。def find(text, substring):    if(len(text) <= 0):        return None    elif(text[0:len(substring)] == substring):        return substring    else:        return find(text[1:], substring)def is_string_there(text, string):    if find(text.lower(), string.lower()):        return True    else: return Falseprint(is_string_there("love is war","war"))print(is_string_there("love is war","warfalse"))
查看完整描述

4 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

好问题。给定递归函数的约束,用外行的话来说,您想要实现的是对字符串的滑动窗口搜索。

也就是说,当您将“文本”传递给 find 函数时,您不会将其作为数组传递,而是传递文本本身。

然后,“查找”函数不会遍历“数组”中的元素,而是遍历字符串中的字母,将它们一一丢弃。因此,您的“窗口” - 或您在字符串上的视图,会滑过它,直到您完成。

您真正需要修改的是:

text[0] == substring

应该检查是否text[0:length_of_substring]匹配子字符串。请记住,我们对字符串的操作与对数组的操作非常相似!

如果没有,移动 1 个字符(就像您在基于数组的搜索中所做的那样)。

为了您的兴趣,可以使用Rabin Karp等算法非常有效地解决这些问题

当您的“文本”中剩余的字符少于子字符串中的字符时,您可以进行的一个小优化是中断搜索。

希望有帮助!


查看完整回答
反对 回复 2022-07-19
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

我不确定我是否遗漏了什么,但你为什么不使用in关键字?


>>>"War" in "Love is War"

true

>>>"War" in "LoveIsWar"

true

>>>"Warfalse" in "Love is War"

false


查看完整回答
反对 回复 2022-07-19
?
慕斯709654

TA贡献1840条经验 获得超5个赞

你知道你可以使用in操作符检查 python 中的子字符串吗?


if "war".lower() in "LoveIsWar".lower():

    return True

lower 用于匹配不区分大小写


如果你确实需要它是一个递归函数,我建议你看看这个:https ://www.geeksforgeeks.org/recursive-function-to-do-substring-search/


查看完整回答
反对 回复 2022-07-19
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您可以直接使用in来确定给定字符串中是否存在子字符串。


像这样的东西:


myString1 = "Love Is War"

myString2 = "LoveIsWar"


print("War" in myString1)


print("War" in myString2)


查看完整回答
反对 回复 2022-07-19
  • 4 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号