representa un str cadena de texto, m representa un cadena de patrón;
str [i] y m [j] coincide con el carácter está siendo comparado;
KMP tiempo de complejidad es O (m + n), la violencia, es resolver el tiempo de complejidad O (m * n)
KMP utiliza m [0: j-1] y str [ij: i-1] que es el mismo, pero obviamente, no puede resolver la violencia.
int kmp ( string str, cadena m) { int siguiente [MAXN]; Siguiente [ 0 ] = - 1 ; int i = 0 ; int j = - 1 ; mientras que (i < m.size ()) { si (j == - 1 || m [i] == m [j]) { i ++ ; j ++ ; Siguiente [i] = j; } Más { j =Siguiente [j]; } } I = 0 ; j = 0 ; mientras que (i <str.size () && j < m.size ()) { si (j == - 1 || str [i] == m [j]) { i ++ ; j ++ ; } Más { j = siguiente [j]; }
Si (j == m.size () - 1)
{
ij retorno;
} }
Volver -1; }