1. 程式人生 > 實用技巧 >尋找比目標字母大的最小字母

尋找比目標字母大的最小字母

尋找比目標字母大的最小字母

題目:
給你一個排序後的字元列表 letters ,列表中只包含小寫英文字母。另給出一個目標字母 target,請你尋找在這一有序列表裡比目標字母大的最小字母。

在比較時,字母是依序迴圈出現的。舉個例子:

如果目標字母 target = 'z' 並且字元列表為 letters = ['a', 'b'],則答案返回 'a'

示例:

輸入:
letters = ["c", "f", "j"]
target = "a"
輸出: "c"

輸入:
letters = ["c", "f", "j"]
target = "c"
輸出: "f"

輸入:
letters = ["c", "f", "j"]
target = "d"
輸出: "f"

輸入:
letters = ["c", "f", "j"]
target = "g"
輸出: "j"

輸入:
letters = ["c", "f", "j"]
target = "j"
輸出: "c"

輸入:
letters = ["c", "f", "j"]
target = "k"
輸出: "c

解題思路: 一道搜尋左邊界的二分題目, 套用模板答題即可

class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        int l = 0, r = letters.length - 1;
        while(l <= r) {
            int mid = l + (r - l) / 2;
            char ch = letters[mid];
            if(ch < target) {
                l = mid + 1;
            } else if(ch == target) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        
        return l == letters.length ? letters[0] : letters[l];
    }
}