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

231 阅读2分钟

这是我参与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)