这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战。
题目描述:
744. 寻找比目标字母大的最小字母 - 力扣(LeetCode) (leetcode-cn.com)
给你一个排序后的字符列表 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"
提示:
letters长度范围在[2, 10000]区间内。letters仅由小写字母组成,最少包含两个不同的字母。- 目标字母
target是一个小写字母。
思路分析
遍历
由于数组已经排序,所以我们只需要从左到右遍历数组即可,如果找到比目标字母大的字母即为答案,如果找不到,答案就是第一个字母。
AC代码
class Solution {
fun nextGreatestLetter(letters: CharArray, target: Char): Char {
letters.forEach {
if(it > target) {
return it
}
}
return letters[0]
}
}
记录存在的字母
由于字母最多只有26个,所以我们可以使用一个26长度的数组来记录哪些字母存在。
记录完成之后,我们从目标字母的下一个位置开始遍历,如果有存在的字母即为答案,如果没有,答案则是第一个字母。
这个比较简单就不贴代码了。
总结
此题比较简单,类似与数组找数的这种我们通常还有二分查找。
参考
寻找比目标字母大的最小字母 - 寻找比目标字母大的最小字母 - 力扣(LeetCode) (leetcode-cn.com)