https://leetcode.com/problems/find-smallest-letter-greater-than-target/
impl Solution {
pub fn next_greatest_letter(letters: Vec<char>, target: char) -> char {
let mut l = 0;
let mut r = letters.len();
while l < r {
let m = l + (r - l) / 2;
match target.cmp(&letters[m]) {
std::cmp::Ordering::Equal => {
// find upper bound of the same letters
let mut l = m;
let mut r = letters.len();
while l < r {
let m = l + (r - l) / 2;
match target.cmp(&letters[m]) {
std::cmp::Ordering::Equal => l = m + 1,
_ => r = m,
}
}
if l == letters.len() {
return letters[0];
}
return letters[l];
}
std::cmp::Ordering::Less => r = m,
std::cmp::Ordering::Greater => l = m + 1,
}
}
if l == letters.len() {
return letters[0];
}
letters[l]
}
}