KMP알고리즘으로 풀면 된다.
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)
'코딩 > 알고리즘' 카테고리의 다른 글
백준 4354 문자열 제곱 (0) | 2018.01.12 |
---|---|
백준 1701 Cubeditor (0) | 2018.01.12 |
백준 1015 수열 정렬 (0) | 2018.01.10 |
백준 1016 제곱 ㄴㄴ수 (7) | 2018.01.10 |
백준 10217 KCM Travel (0) | 2018.01.08 |