January 24, 2023
접두사와 접미사의 개념을 활용하면 반복되는 연산을 얼마나 줄일 수 있는지 판별하여 매칭할 문자열을 빠르게 점프할 수 있다.
접두사와 접미사가 일치하는 최대 길이
| 길이 | 문자열 | 최대 일치 길이 |
|---|---|---|
| 1 | a | 0 |
| 2 | ab | 0 |
| 3 | aba | 1 |
| 4 | abac | 0 |
| 5 | abaca | 1 |
| 6 | abacaa | 1 |
| 7 | abacaab | 2 |
| 8 | abacaaba | 3 |
소스코드
def make_table(pattern):
pattern_size = len(pattern)
table = [0] * pattern_size
j = 0
for i in range(1, pattern_size):
while (j > 0 and pattern[i] != pattern[j]):
print(j, pattern[i], pattern[j])
j = table[j - 1]
if (pattern[i] == pattern[j]):
table[i] = j = j + 1
return table
pattern = "abacaaba"
print(make_table(pattern))