Hi everyone! I implemented a palindrome function where I use iter.next() and iter.next_back() to navigate the string so that I don't loop over it twice.
I'm not sure about the loop part, I think it could be written in a much simpler/clearer way
fn is_palindrome (str: &str) -> bool {
if str.len() < 3 {
return false
}
let binding = str
.replace(&['(', ')', ',', '-', '–', '\"', '.', ';', ' ', ':', '\''][..], "")
.to_lowercase();
let trimmed_str = binding.trim();
let iter_bytes = trimmed_str.trim().as_bytes().iter();
match IntoIterator::into_iter(iter_bytes) {
mut iter => loop {
let next: &u8;
let back:&u8;
match iter.next() {
Some(val) => next = val,
None => break,
}
match iter.next_back() {
Some(val) => back = val,
None => break,
}
if back != next {
return false
}
},
};
return true;
}