문자열 검색 알고리즘 (string matching)
브루트포스로 p를 s 인덱스 하나씩 옮겨가면서 비교하면 시간이 너무 오래걸림
브루트포스 시간복잡도 : O(n*m)
kmp 알고리즘 시간복잡도 : O(n+m)
s=input()
p=input()
#p의 접두사, 접미사 구하기
l=[0 for x in range(len(p))]
i=1
j=0
while i<len(p):
while j>0 and p[j]!=p[i]:
j=l[j-1]
if p[j]==p[i]:
j+=1
l[i]=j
i+=1
j=0
for i in range(len(s)):
while (j>0 and s[i]!=p[j]):
j=l[j-1]
if s[i]==p[j]:
if j==len(p)-1:
print("1")
exit()
else:
j+=1
print("0")
다른 문제 하나 더 풀어보고 완벽히 이해해서 정리본 올릴 것!
참고