3. What will be the output of the following Rust code snippet using KMP to find pattern "ABABC" in text "ABABABCABABC"?
fn main() {
let text = "ABABABCABABC";
let pattern = "ABABC";
let positions = kmp_search(text, pattern);
println!("{:?}", positions);
}
fn kmp_search(text: &str, pattern: &str) -> Vec<usize> {
let lps = compute_lps(pattern);
let mut result = Vec::new();
let mut i = 0;
let mut j = 0;
while i < text.len() {
if text.as_bytes()[i] == pattern.as_bytes()[j] {
i += 1;
j += 1;
if j == pattern.len() {
result.push(i - j);
j = lps[j - 1];
}
} else if j > 0 {
j = lps[j - 1];
} else {
i += 1;
}
}
result
}
fn compute_lps(pattern: &str) -> Vec<usize> {
let mut lps = vec![0; pattern.len()];
let mut length = 0;
let mut i = 1;
while i < pattern.len() {
if pattern.as_bytes()[i] == pattern.as_bytes()[length] {
length += 1;
lps[i] = length;
i += 1;
} else if length > 0 {
length = lps[length - 1];
} else {
lps[i] = 0;
i += 1;
}
}
lps
}