pub fn reverse_complement_of_dna_sequence(sequence: &[u8]) -> Vec<u8> {
let mut reverse_complement = Vec::with_capacity(sequence.len());
for base in sequence.iter().rev() {
reverse_complement.push(match base {
b'A' => b'T',
b'C' => b'G',
b'G' => b'C',
b'T' => b'A',
_ => *base,
});
}
reverse_complement
}
pub fn reverse_complement_of_dna_sequence_in_place(sequence: &mut [u8]) {
let mut i = 0;
let mut j = sequence.len() - 1;
while i < j {
sequence.swap(i, j);
i += 1;
j -= 1;
}
sequence.iter_mut().for_each(|x| {
*x = match x {
b'A' => b'T',
b'C' => b'G',
b'G' => b'C',
b'T' => b'A',
_ => *x,
}
});
}