접두사 기능을 최적화한 후(자세한 내용은 여기) O(n) 점근법을 사용하여 최종 알고리즘을 얻습니다.
벡터<정수> 접두사_함수(문자열 s) { 정수 n = (정수 ) s.길이(); 벡터<정수>파이(n); for (int i=1; i<n; ++i) { int j = pi[i-1< /스팬>]; 동안 (j > 0 && s[i] != s[j]) j = pi[j-1]; if (s[i] == s[j]) ++ 스팬>j; 파이[i] = j; } 리턴파이; }
N
1
i
1000 ms 256 Mb Rules for program design and list of errors in automatic problem checking