vector getPi(string p) {

int m = p.size(), j = 0;

vector pi(m, 0);

for (int i = 1; i

while (j > 0 && p[i] != p[j])

j = pi[j - 1];

if (p[i] == p[j])

pi[i] = ++j;

}

return pi;

}


저게 접두 접미 같은거 찾는건데


다른 부분은 다 이해가 가는데


저 빨간색 부분만 이해가 안감 코드는 KMP 코드랑 비슷해서 외우기도 했고 KMP에서 j=pi[j-1]은 이해했는데


while문 조건도 다 이해가 가는데 왜 저렇게 pi[j-1]로 가면 되는지 모르겠음