rustgym/leetcode/
_744_find_smallest_letter_greater_than_target.rs1struct 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}