返回

744. 寻找比目标字母大的最小字母

前端

题目

给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,返回比目标字母大的最小字母。

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

示例 5:

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

提示:

  • 1 <= letters.length <= 104
  • letters 只包含小写英文字母
  • target 是一个小写英文字母

解题思路

这道题很简单,我们可以先找到target在letters中的位置,然后判断target是否为letters最后一个字母,如果是,则返回letters的第一个字母。否则,返回target的下一个字母。

代码实现

def nextGreatestLetter(letters, target):
    """
    :type letters: List[str]
    :type target: str
    :rtype: str
    """
    # 找到target在letters中的位置
    index = bisect.bisect_right(letters, target)

    # 如果target为letters最后一个字母,则返回letters的第一个字母
    if index == len(letters):
        return letters[0]
    # 否则,返回target的下一个字母
    else:
        return letters[index]

# 测试代码
letters = ["c", "f", "j"]
target = "d"
result = nextGreatestLetter(letters, target)
print(result)  # 输出:f

letters = ["c", "f", "j"]
target = "c"
result = nextGreatestLetter(letters, target)
print(result)  # 输出:f

letters = ["c", "f", "j"]
target = "g"
result = nextGreatestLetter(letters, target)
print(result)  # 输出:j

letters = ["c", "f", "j"]
target = "j"
result = nextGreatestLetter(letters, target)
print(result)  # 输出:c

letters = ["c", "f", "j"]
target = "k"
result = nextGreatestLetter(letters, target)
print(result)  # 输出:c

时间复杂度

时间复杂度为 O(log n),其中 n 为 letters 的长度。

空间复杂度

空间复杂度为 O(1),因为我们不需要额外空间来存储数据。