ex)
public static int bMatch(String txt, String pat){
int pt = 0; // txt 커서
int pp = 0; // pat 커서
while (pt != txt.length() && pp != pat.length()){ // 텍스트가 끝나거나 패턴이 끝까지 일치할 때까지 반복
if(txt.charAt(pt) == pat.charAt(pp)){
pt++;
pp++;
} else { // 패턴 불일치시, 패턴 인덱스 초기화, 텍스트 인덱스 +1
pt = pt - pp + 1;
pp = 0;
}
}
if(pp == pat.length()){ // 일치 시작하는 인덱스 return, 없으면 -1 return
return pt - pp;
}
return -1;
}
한칸씩 이동하는 브루트-포스보다 패턴을 최소의 횟수로 옮겨 효율적이다.
이동시킬 때마다 계산하는건 비효율적이니 ‘몇 번째 문자부터 다시 검색할지’에 대한 표를 미리 만들어놔야 한다.
이렇듯 KMP처럼 패턴의 중복된 문자의 건너뛰기 표를 만드는 것이 아닌
모든 문자열에 대해 몇칸 이동해야하는지 표를 작성해 비교하며 이동
참고 도서