https://chatgpt.com/share/6820120b-9388-800c-9c29-53fa8848b11d
static int[] Failure_Function_Computation (String pattern)
{
int[] failure_func = new int[pattern.length()];
int prefix_pointer = 0;
for (int i=1; i<pattern.length(); i++)
{
while ( prefix_pointer > 0 && pattern.charAt(prefix_pointer) != pattern.charAt(i) )
prefix_pointer = failure_func[prefix_pointer-1];
if ( pattern.charAt(prefix_pointer) == pattern.charAt(i) )
prefix_pointer++;
failure_func[i] = prefix_pointer;
}
return failure_func;
}
static ArrayList<Integer> KMP (String text, String pattern)
{
ArrayList<Integer> pattern_pos = new ArrayList<>();
int[] failure_func = Failure_Function_Computation(pattern);
int pattern_pointer = 0;
for (int i=0; i<text.length(); i++)
{
while ( pattern_pointer > 0 && text.charAt(i) != pattern.charAt(pattern_pointer) )
pattern_pointer = failure_func[pattern_pointer-1];
if ( text.charAt(i) == pattern.charAt(pattern_pointer) )
pattern_pointer++;
if ( pattern_pointer == pattern.length() )
{
pattern_pos.add(i - pattern_pointer + 1);
pattern_pointer = failure_func[pattern_pointer-1];
}
}
return pattern_pos;
}
참조
https://chatgpt.com/share/66fdedbe-0dac-800c-9ec6-1f8300fdbfb3
https://bowbowbow.tistory.com/6
'라이브러리 > JAVA' 카테고리의 다른 글
Binary Lifting (0) | 2025.01.18 |
---|---|
완전이진트리 노드 k의 서브트리 사이즈 (1) | 2025.01.02 |
사이클 최소합 (1) | 2024.08.10 |
변형 인접리스트 (0) | 2024.08.08 |
벨만 포드 (2) | 2024.07.28 |