首页 > 解决方案 > 如何仅使用递归在字符串中查找子字符串?

问题描述

所以这是我的代码

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。

标签: pythonstringrecursionsubstringthonny

解决方案


您的代码无法正常工作,因为只有在找到将导致程序在同一位置找到子字符串的子字符串时才跳过一个字符,而是在第一次出现子字符串后跳到索引处。此代码将起作用

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”,所以下一次迭代不会在与以前相同的地方找到“生病”,这会导致两次计算相同的出现。


推荐阅读