def KMP(text,Pattern,Phi):
count = 0
pos = ""
TextSize = len(text)
PatternSize = len(Pattern)
q = 0
for i in range(0,TextSize):
while q > 0 and Pattern[q] != text[i]: #* mismatch
q = Phi[q-1]
if Pattern[q] == text[i]:#* match
if q == PatternSize -1:
count += 1
pos += str(i-PatternSize+1+1) + " "
q = Phi[q]
else:
q += 1
return count,pos
def PrefixFunc(P): #* Make Phi array
m = len(P)
phi = [0 for x in range(m)]
phi[0] = 0
k = 0
for q in range(1,m):
while k > 0 and P[k] != P[q]:
k = phi[k-1]
if P[k] == P[q]:
k += 1
phi[q] =k
return phi
def main():
data1 = input()
data2 = input()
T = list(data1)
P = list(data2)
phi = PrefixFunc(P)
count = 0
pos = None
count,pos = KMP(T,P,phi)
print(count)
print(pos)
if __name__ == '__main__':
main()
'Code' 카테고리의 다른 글
raw to bmp (0) | 2022.03.29 |
---|---|
백준 4354 (0) | 2022.02.07 |
[백준1978] 소수찾기 (0) | 2020.01.09 |
[백준1193] 분수찾기 (0) | 2020.01.09 |
[백준 2455] 지능형 기차 (0) | 2020.01.09 |