Try to find the subsequence `sub` in the `whole` sequence. Returns None if it's not been found, or Some(index) if it has been. Naive implementation until proven we need something better.
(sub: &[T], whole: &[T])
| 86 | /// it's not been found, or Some(index) if it has been. Naive implementation |
| 87 | /// until proven we need something better. |
| 88 | fn find_subsequence<T: PartialEq>(sub: &[T], whole: &[T]) -> Option<usize> { |
| 89 | assert!(!sub.is_empty()); |
| 90 | // We want i + sub.len() <= whole.len(), i.e. i < whole.len() + 1 - sub.len(). |
| 91 | if whole.len() < sub.len() { |
| 92 | return None; |
| 93 | } |
| 94 | let max = whole.len() - sub.len(); |
| 95 | for i in 0..=max { |
| 96 | if whole[i..i + sub.len()] == sub[..] { |
| 97 | return Some(i); |
| 98 | } |
| 99 | } |
| 100 | None |
| 101 | } |
| 102 | |
| 103 | #[test] |
| 104 | fn test_find_subsequence() { |