How to find the shortest identical consecutive subvector in an vector with Rust

1 Answer

0 votes
fn shortest_identical_consecutive_subarray(vec: &[i32]) -> Vec<i32> {
    if vec.is_empty() {
        return Vec::new();
    }

    let mut best_start = 0usize;
    let mut best_len = vec.len();

    let mut current_start = 0usize;
    let mut current_len = 1usize;

    for i in 1..vec.len() {
        if vec[i] == vec[i - 1] {
            current_len += 1;
        } else {
            if current_len < best_len {
                best_len = current_len;
                best_start = current_start;
            }
            current_start = i;
            current_len = 1;
        }
    }

    if current_len < best_len {
        best_len = current_len;
        best_start = current_start;
    }

    vec[best_start..best_start + best_len].to_vec()
}

fn main() {
    let vec = vec![
        3, 3, 3,
        7, 7, 7, 7, 7,
        2, 2,
        5, 5, 5, 5,
        9, 9, 9, 9, 9, 9,
    ];

    let result = shortest_identical_consecutive_subarray(&vec);

    print!("Array result: ");
    for x in result {
        print!("{} ", x);
    }
}




/*
run:

Array result: 2 2 

*/

 



answered Feb 9 by avibootz

Related questions

...