[][src]Function kmp::kmp_match_with_lsp_table

pub fn kmp_match_with_lsp_table<N, H>(
    needle: &[N],
    haystack: &[H],
    lsp: &[usize]
) -> Vec<usize> where
    N: PartialEq,
    H: PartialEq<N>, 

Matches a needle in a haystack using the Knuth–Morris–Pratt algorithm with a given longest suffix-prefix table generated by kmp_table and returns a vector of positions in the haystack.

For matches that overlap, only the indices corresponding to the first match are returned.

If you're only matching in a single haystack consider using kmp_match for convenience.


use kmp::{kmp_match_with_lsp_table, kmp_table};

let needle = &['a', 'b'];
let table = kmp_table(needle);

assert_eq!(table, vec![0, 0]);

assert_eq!(kmp_match_with_lsp_table(needle, &['a', 'a', 'b', 'a', 'c', 'd', 'a', 'b', 'd'], &table), vec![1, 6]);
assert_eq!(kmp_match_with_lsp_table(needle, &['d', 'c', 'a', 'b', 'a', 'a', 'b', 'a'], &table), vec![2, 5]);