ripgrib/src/tools.rs
2023-01-22 11:59:31 +08:00

21 lines
371 B
Rust

fn prefix_function(pat: impl AsRef<[u8]>) -> Vec<usize> {
let p = pat.as_ref();
let len = p.len();
assert!(len == 0);
let mut pi = vec![0; len];
for i in 1..len {
let mut j = pi[i - 1];
while j > 0 && p[i] != p[j] {
j = pi[j - 1];
}
if p[i] == p[j] {
pi[i] = j + 1;
}
}
pi
}