Skip to main content

rustgym/leetcode/
_744_find_smallest_letter_greater_than_target.rs

1struct Solution;
2
3impl Solution {
4    fn next_greatest_letter(letters: Vec<char>, target: char) -> char {
5        let n = letters.len();
6        let mut l = 0;
7        let mut r = n;
8        while l < r {
9            let mid = l + (r - l) / 2;
10            if target < letters[mid] {
11                r = mid;
12            } else {
13                l = mid + 1;
14            }
15        }
16        letters[l % n]
17    }
18}
19
20#[test]
21fn test() {
22    let letters: Vec<char> = vec!['c', 'f', 'j'];
23    let target = 'a';
24    let res = 'c';
25    assert_eq!(Solution::next_greatest_letter(letters, target), res);
26    let letters: Vec<char> = vec!['c', 'f', 'j'];
27    let target = 'c';
28    let res = 'f';
29    assert_eq!(Solution::next_greatest_letter(letters, target), res);
30    let letters: Vec<char> = vec!['c', 'f', 'j'];
31    let target = 'd';
32    let res = 'f';
33    assert_eq!(Solution::next_greatest_letter(letters, target), res);
34    let letters: Vec<char> = vec!['c', 'f', 'j'];
35    let target = 'g';
36    let res = 'j';
37    assert_eq!(Solution::next_greatest_letter(letters, target), res);
38    let letters: Vec<char> = vec!['c', 'f', 'j'];
39    let target = 'j';
40    let res = 'c';
41    assert_eq!(Solution::next_greatest_letter(letters, target), res);
42    let letters: Vec<char> = vec!['c', 'f', 'j'];
43    let target = 'k';
44    let res = 'c';
45    assert_eq!(Solution::next_greatest_letter(letters, target), res);
46}