Code
백준 1786
BIGFROG
2022. 2. 7. 21:16
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()