1 소개
① 문자열 일치 폭력적 시간 복잡도 O (N의 *를 M)은, 일단 매치 오류가 발생 S 시리즈 및 T 시리즈는 매치를 시작하기 위해 다시 시작점으로 하강한다.
INT ViolentMatch (CHAR * S, 숯 *의 T)을 { INT sLen = strlen 함수 (S) ; TLEN의 = 용의 strlen (T)을 int로 대 (INT I = 0; I는 sLen <; I는 ++)을 {// S 문자열 INT J = 0 ; 위해 (; J <TLEN, J ++) {// T 스트링 경우 (들 [내가 J +] [J]을 = (T)를!) 휴식 // 매치 실패 } (J는 TLEN를 ==) IF I 반환 // 매치 완전히 } -1을 리턴; }
노출 문제 : 실패하면, S 시리즈와 T 시리즈는 점 일치를 시작 발생 롤백해야합니다. 그냥, S 시리즈는 롤백하지 않는 문자열 롤백 T를 할 수있는 방법이 있습니까? KMP 응용 프로그램이 탄생했다.
O의 ②KMP 시간 복잡도 (N + M)
아이디어 : 경기가 실패 할 때마다, S 문자열을 롤백하지 않는 롤백 실패 할 수없는, T 다시 최대 접두어 문자열, 다음 배열의 도입에 떨어진다.
참조 : https://blog.csdn.net/wardseptember/article/details/78801491