pub fn star_question_match(pattern: &[u8], input: &[u8]) -> bool {
let (mut p, mut i) = (0usize, 0usize);
let mut star = None;
let mut retry_input = 0usize;
while i < input.len() {
if p < pattern.len() && (pattern[p] == b'?' || pattern[p] == input[i]) {
p += 1;
i += 1;
} else if p < pattern.len() && pattern[p] == b'*' {
star = Some(p);
p += 1;
retry_input = i;
} else if let Some(star_pos) = star {
p = star_pos + 1;
retry_input += 1;
i = retry_input;
} else {
return false;
}
}
while p < pattern.len() && pattern[p] == b'*' {
p += 1;
}
p == pattern.len()
}