Python 3.x python 3.7中的字符串

Python 3.x python 3.7中的字符串,python-3.x,Python 3.x,如何计算字符串中的子字符串 示例:findSubstrings(“foxcatfox”、“fox”)#应该返回2如果递归确实是必须的,您可以尝试先划分问题 假设您在位置i处找到了一个匹配的子字符串,那么子字符串的总数是1+findSub(string[i+1:],sub),因此您可以这样写: def findSubstringsRecursive(string, substring): counter = 0 substringLength = len(substring)

如何计算字符串中的子字符串


示例:findSubstrings(“foxcatfox”、“fox”)#应该返回2

如果递归确实是必须的,您可以尝试先划分问题

假设您在位置
i
处找到了一个匹配的子字符串,那么子字符串的总数是
1+findSub(string[i+1:],sub)
,因此您可以这样写:

def findSubstringsRecursive(string, substring):
    counter = 0
    substringLength = len(substring)
    for i in range(len(string)):
        if string[i] == substring[0]:
            end = i + substringLength
            sub1 = string[i:end]
            if substring == sub1:
                return 1 + findSubstringsRecursive(string[i+1:], substring)
    return 0

以下纯递归方法足够简单(除了
bool->int
强制之外):

def findRec(s,pat):
如果len(s)>>查找子字符串('foxcatfox','fox')
2.
>>>查找子字符串('foxcatfox','foxc')
1.
>>>查找子字符串(“狐猫”、“狗”)
0

我应该注意到,这包括可能需要或可能不需要的重叠事件。还可以为空的
子字符串

添加保护或定义行为这并不是通常使用递归解决的问题。递归对于有深度的东西(比如图形/树等)来说是很好的,但是这里你只需要一个字符串,这样循环就更合适了?比如
“foxcatfox.count(“fox”)
为什么要递归?您想不想计算重叠命中数?如果字符串本身太长,这将超过最大深度(默认值1000)。@iBug如果问题太大,递归方法解决任何问题的情况就是如此……OP的代码会查找重叠出现的情况,所以你的方法应该很好,但这不是一种纯粹的递归方法。以迭代的方式找到匹配的子串。然后递归被强制引入:)@schwobasegll但是迭代几乎总是可以被重新安排成递归的,不是吗?是的,这样一个明显的学术练习的要点是看到递归解决方案的美学和实现的简单性。我认为这一点在这种混合中有点迷失了。简单性的缺乏可以被看作是因为您甚至没有摆脱过时的
计数器
;)
def findRec(s, pat):
    if len(s) < len(pat):  # base case should be obvious
        return 0
    return (pat == s[:len(pat)]) + findRec(s[1:], pat)  # recurse with smaller size

>>> findSubstrings('foxcatfox', 'fox')
2
>>> findSubstrings('foxcatfox', 'foxc')
1
>>> findSubstrings('foxcat', 'dog')
0