題目
難度:★☆☆☆☆
類型:數(shù)組
給定一個只包含小寫字母的有序數(shù)組letters 和一個目標字母 target,尋找有序數(shù)組里面比目標字母大的最小字母。
數(shù)組里字母的順序是循環(huán)的。舉個例子,如果目標字母target = 'z' 并且有序數(shù)組為 letters = ['a', 'b'],則答案返回 'a'。
注意
letters長度范圍在[2, 10000]區(qū)間內。
letters 僅由小寫字母組成,最少包含兩個不同的字母。
目標字母target 是一個小寫字母。
示例
輸入:
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"
解答
我們可以把目標字符加入到字符數(shù)組中,去重后進行排序,如果目標字符恰好是排序后最后一個元素,那么返回派蘇數(shù)組的第一個字符,否則返回目標字符所在位置的下一個字符即可。
class Solution:
def nextGreatestLetter(self, letters, target):
letters = sorted(list(set(letters+[target])))
return letters[0] if letters[-1] == target else letters[letters.index(target)+1]
很多大佬這道題用二分法查找,筆者認為這是訓練算法技能的一個途徑,不過對于這道題似乎沒有必要,因為對于字母來說也就26個。
如有疑問或建議,歡迎評論區(qū)留言~