본문 바로가기

코딩/컨닝페이퍼

KMP 알고리즘

http://mygumi.tistory.com/61

http://bowbowbow.tistory.com/6


text = input()
pattern = input()
pi = [0 for i in range(0, len(pattern))]
result = list()
count = 0

j=0
for i in range(1,len(pattern)):
    while(j > 0 and pattern[i] != pattern[j]):
        j = pi[j - 1]
    if(pattern[i] == pattern[j]):
        j+=1
        pi[i] = j

j = 0;
patternLength = len(pattern)
textLength = len(text)
for i in range(0, textLength):
    while(j > 0 and text[i] != pattern[j]):
        j = pi[j - 1]
    if(text[i] == pattern[j]):
        if(j == patternLength - 1):
            ##같은 패턴을 찾았음
            result.append(i - patternLength + 2)
            count+=1
            j = pi[j]
        else:
            j+=1

print(count)
for c in result:
    print(c)







'코딩 > 컨닝페이퍼' 카테고리의 다른 글

문자열의 Suffix Array와 LCP 연산 알고리즘  (0) 2018.01.14
벨만 포드 알고리즘  (0) 2018.01.08
다익스트라 알고리즘  (0) 2018.01.07
위상정렬 알고리즘  (0) 2018.01.07