📅  最后修改于: 2023-12-03 14:50:46.742000             🧑  作者: Mango
这是一道关于递归的算法题。给出了一个字符串和一个子字符串,要求在字符串中找到所有与子字符串相同的子串,并返回它们在字符串中第一次出现的位置。如果字符串中没有子串,则返回-1。
可以使用递归实现,从字符串的头部开始比较,如果找到和子字符串相同的子串,则记录它在字符串中的位置,并把剩余的字符串作为新的字符串,继续递归处理。如果没有找到,则返回-1。
具体实现可以先在字符串中查找子字符串,如果找到则记录其位置,然后将字符串从该位置之后的部分作为新的字符串再次递归处理。
def find_substring(string, sub_string, start=0):
"""
在字符串中查找子串
:param string: 字符串
:param sub_string: 子串
:param start: 开始查找的位置
:return: 找到子串时返回位置,否则返回-1
"""
if start >= len(string):
return -1
index = string.find(sub_string, start)
if index == -1:
return -1
return index
def find_all_substrings(string, sub_string):
"""
查找字符串中所有子串的位置
:param string: 字符串
:param sub_string: 子串
:return: 所有子串的位置
"""
positions = []
while True:
index = find_substring(string, sub_string)
if index == -1:
break
positions.append(index)
string = string[index + 1:]
return positions
assert find_all_substrings("ABCBDCBDBDBEBD", "BD") == [4, 7, 11, 14]
assert find_all_substrings("ABCDEF", "ZZ") == []
assert find_all_substrings("AABBCC", "BB") == [1, 3]
assert find_all_substrings("ABABABA", "ABA") == [0, 2, 4]
assert find_all_substrings("ABCDABCD", "BCD") == [1, 5]
以上代码实现可以找到字符串中所有相同的子串,并返回它们在字符串中第一次出现的位置。