python - 如何仅使用递归在字符串中查找子字符串?
问题描述
所以这是我的代码
def count_occurrences(sub, s):
if len(s) == 0:
return 0
else:
if str(sub) in str(s) and str(sub) == str(s):
return 1+count_occurrences(sub, s[1:])
else:
return count_occurrences(sub, s[1:])
print(count_occurrences('ill', 'Bill will still get ill'))
我相信if str(sub) in str(s) and str(sub) == str(s):
当我运行调试器 UI 时,这句话让我大吃一惊。如果我只是把if str(sub) in str(s)
它给了我一个数字,但它不是我想要的数字,它是 4。
解决方案
您的代码无法正常工作,因为只有在找到将导致程序在同一位置找到子字符串的子字符串时才跳过一个字符,而是在第一次出现子字符串后跳到索引处。此代码将起作用
def count_occurences(s, sub):
if len(s) == 0:
return 0
else:
ind = s.find(sub)
if ind>=0:
return 1+count_occurences(s[ind+1:], sub)
else:
return 0
我在索引中添加了 1,因为在“生病”的情况下,find()
会给我字母“i”的索引,所以如果我给出s[ind+1:]
它将删除第一个“l”之前的所有字符,即包括“i”,所以下一次迭代不会在与以前相同的地方找到“生病”,这会导致两次计算相同的出现。
推荐阅读
- mysql - '' 附近的 SQL 语法错误
- python - #coding=utf-8 和 #coding=gbk 之间的区别
- python - 将excel文件读取到dict,但只显示一行
- reflection - 合并两个对象的值
- javascript - 如何设置从我自己的类到内置类的继承
- gtk - 如何从 gjs 中的 Gtk.Context 中缩小窗口按钮
- javascript - Angular 6 - 尝试为应用程序提供服务时未定义进程
- angular - 角未知元素
- rabbitmq - 在rabbitmq中发生几次nack异常后超时异常
- unity3d - 统一切换车道后人物一直在波动?