1pub fn naive(pattern: &String, text: &String) -> Vec<usize> {
4 let pattern_chars = pattern.chars();
5 let text_chars = text.chars();
6
7 let mut positions: Vec<usize> = Vec::new();
8
9 'outter: for i in 0..text.len() {
10 for (j, p) in pattern_chars.clone().enumerate() {
11 if i + j >= text.len() {
13 return positions;
14 }
15 if p != text_chars.clone().nth(i + j).unwrap() {
17 continue 'outter;
18 }
19 }
20 positions.push(i);
21 }
22 return positions;
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28
29 #[test]
30 fn test_naive_simple() {
31 let pattern = "ana".to_string();
32 let text = "banana".to_string();
33
34 let res = naive(&pattern, &text);
35 assert_eq!(res, vec![1, 3]);
36 }
37
38 #[test]
39 fn test_naive_complex() {
40 let pattern = "ban".to_string();
41 let text = "bananbnanabanbnnban".to_string();
42
43 let res = naive(&pattern, &text);
44 assert_eq!(res, vec![0, 10, 16]);
45 }
46}