Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::collections::VecDeque;
- fn find_start_of_next_packet(packet: &str, distinct: usize) -> usize {
- let mut position = 0;
- let mut letters: [u32; 26] = [0; 26];
- let mut queue: VecDeque<char> = VecDeque::with_capacity(distinct);
- let mut packet_iter = packet.chars();
- // Load the holding deque and char counts
- for _ in 0..distinct {
- if let Some(c) = packet_iter.next() {
- queue.push_back(c);
- letters[(c as usize) - 97usize] += 1;
- position += 1;
- }
- }
- // loop through chars to find break point
- while let Some(c) = packet_iter.next() {
- if letters.iter().filter(|v| **v > 0u32).count() == distinct {
- break;
- } else {
- let remove = queue.pop_front().unwrap();
- letters[(remove as usize) - 97usize] -= 1;
- queue.push_back(c);
- letters[(c as usize) - 97usize] += 1;
- position += 1;
- }
- }
- position
- }
Advertisement
Add Comment
Please, Sign In to add comment