最近在學(xué)習(xí)子串排序算法,在此記錄下實(shí)現(xiàn)方式
def bf(string1, string2):
"""
bf
:param string1:
:param string2:
:return:
"""
x, y = 0, 0
while x < len(string1) and y < len(string2):
if string1[x] == string2[y]:
x += 1
y += 1
continue
x = x - y + 1
y = 0
if y >= len(string2):
return x - len(string2)
return 0
def get_next_list(substring):
"""
獲取next列表
:param substring:
:return:
"""
next_list = [0] * len(substring)
x, y = 0, 1
while y < len(substring):
if substring[x] == substring[y]:
x += 1
next_list[y] = x
y += 1
else:
if x == 0:
next_list[y] = 0
y += 1
continue
x = next_list[x - 1]
return next_list
def kmp(string1, string2):
"""
kmp
:param string1:
:param string2:
:return:
"""
x, y = 0, 0
next_list = get_next_list(string2)
while x < len(string1) and y < len(string2):
if string1[x] == string2[y]:
x += 1
y += 1
else:
if y == 0:
x += 1
continue
y = next_list[y]
if y >= len(string2):
return x - len(string2)
return 0
if __name__ == '__main__':
res_kmp = kmp("sdadddababab", "dabab")
print(res_kmp)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。