/* Computation of the Border-Table */ FOR j := 1 TO m DO sborder[j] := 0 END j = 1 i = 2 WHILE i <= m DO WHILE i+j-1 <= m AND pat[j] = pat[i+j-1] DO j := j+1 IF i+j-1 <= m THEN sborder[i+j-1] := sborder[j] END IF i+j-1 <= m THEN sborder[i+j-1] := MAX(j, sborder[i+j-1] i := i+j-sborder[j] j := MAX(sborder[j], 1) END /* Algorithm: Knuth/Morris/Pratt */ i := 1 j := 1 WHILE i <= n-m+1 DO WHILE j <= m AND pat[j] = text[i+j-1] DO j := j+1 END IF j = m+1 THEN RETURN TRUE i := i+j-sborder[j] j := MAX(sborder[j],1) END RETURN FALSE