返回
744. 寻找比目标字母大的最小字母
前端
2024-02-17 00:38:20
题目
给你一个排序后的字符列表 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),因为我们不需要额外空间来存储数据。