744. Find Smallest Letter Greater Than Target 寻找比目标字母大的最小字母

题目地址:https://leetcode.com/problems/find-smallest-letter-greater-than-target/description/open in new window

题目描述

Given a list of sorted characters letters containing only lowercase letters, and given a target letter target, find the smallest element in the list that is larger than the given target.

Letters also wrap around. For example, if the target is target = 'z' and letters = ['a', 'b'], the answer is 'a'.

Examples:

Input:
letters = ["c", "f", "j"]
target = "a"
Output: "c"

Input:
letters = ["c", "f", "j"]
target = "c"
Output: "f"

Input:
letters = ["c", "f", "j"]
target = "d"
Output: "f"

Input:
letters = ["c", "f", "j"]
target = "g"
Output: "j"

Input:
letters = ["c", "f", "j"]
target = "j"
Output: "c"

Input:
letters = ["c", "f", "j"]
target = "k"
Output: "c"

Note:

1、 lettershasalengthinrange[2,10000].;
2、 lettersconsistsoflowercaseletters,andcontainsatleast2uniqueletters.;
3、 targetisalowercaseletter.;

题目大意

给出了一个排序的字符数组,找出第一个比target大的字符。注意是数组是循环的。

解题方法

线性扫描

找到第一个比指定字符大的。如果没找到的话,列表是可以循环的。也就是说如果没找到就返回列表第一个字符。

class Solution(object):
    def nextGreatestLetter(self, letters, target):
        """
        :type letters: List[str]
        :type target: str
        :rtype: str
        """
        for letter in letters:
        提交了之后发现不用使用ord,字符可以用'>''<'比较大小
            if ord(letter) > ord(target):
                return letter
        return letters[0]

1 2 3 4 5 6 7 8 9 10 11 12

二分查找

因为是有序的,所以直接二分即可。

class Solution(object):
    def nextGreatestLetter(self, letters, target):
        """
        :type letters: List[str]
        :type target: str
        :rtype: str
        """
        index = bisect.bisect_right(letters, target)
        return letters[index % len(letters)]

1 2 3 4 5 6 7 8 9

DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有

本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发