LeetCode 459 重複的子字串

2021-10-09 08:29:00 字數 1510 閱讀 2126

首先理解kmp演算法,kmp演算法**如下:

from typing import *

def getnext(substr):

"""該函式的核心為構建next陣列,該陣列表示的是模式串開頭有多少個和

當前位置之前字元匹配

比如模式串為abcabc

next陣列為:[0,0,0,1,2,3]

:param substr:

:return:

"""idx, m = 0, len(substr)

pnext = [0] * m

i = 1

while i < m:

if substr[i] == substr[idx]:

pnext[i] = idx + 1

idx += 1

i += 1

else:

if idx != 0:

idx = pnext[idx - 1]

else:

pnext[i] = 0

i += 1

return pnext

def kmp(s: str, t: str):

pnext = getnext(t)

print(pnext)

m, n = len(t), len(s)

i, j = 0, 0

while i < n and j < m:

if s[i] == t[j]:

i += 1

j += 1

else:

if j != 0:

j = pnext[j - 1]

else:

i += 1

if j == m:

return i - j

return -1

該題解法:

class solution:

def repeatedsubstringpattern(self, s: str) -> bool:

pnext = self.getnext(s)

print(pnext)

len1 = len(s)

return pnext[len1 - 1] != 0 and len1 % (len1 - pnext[len1 - 1]) == 0

def getnext(self,substr):

idx, m = 0, len(substr)

pnext = [0] * m

i = 1

while i < m:

if substr[i] == substr[idx]:

pnext[i] = idx + 1

idx += 1

i += 1

else:

if idx != 0:

idx = pnext[idx - 1]

else:

pnext[i] = 0

i += 1

return pnext

leetcode 459 重複的子字串

一 問題描述 給定乙個非空的字串,判斷它是否可以由它的乙個子串重複多次構成。給定的字串只含有小寫英文本母,並且長度不超過10000。示例 1 輸入 abab 輸出 true 解釋 可由子字串 ab 重複兩次構成。示例 2 輸入 aba 輸出 false 示例 3 輸入 abcabcabcabc 輸出...

Leetcode 459 重複的子字串

給定乙個非空的字串,判斷它是否可以由它的乙個子串重複多次構成。給定的字串只含有小寫英文本母,並且長度不超過10000。示例 1 輸入 abab 輸出 true解釋 可由子字串 ab 重複兩次構成。示例 2 輸入 aba 輸出 false示例 3 輸入 abcabcabcabc 輸出 true解釋 可...

LeetCode 459 重複的子字串

題目描述 給定乙個非空的字串,判斷它是否可以由它的乙個子串重複多次構成。給定的字串只含有小寫英文本母,並且長度不超過10000。輸入樣例1 輸入 abab 輸出 true 解釋 可由子字串 ab 重複兩次構成。輸入樣例2 輸入 aba 輸出 false 輸入樣例3 輸入 abcabcabcabc 輸...