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

486 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

  • 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。
  • 在比较时,字母是依序循环出现的。举个例子:
    • 如果目标字母 target = 'z' 并且字符列表为 letters = ['a', 'b'],则答案返回 'a'
  • 示例 1:
    • 输入: letters = ["c", "f", "j"],target = "a"
    • 输出: "c"
  • 示例 2:
    • letters = ["c","f","j"], target = "c"
    • 输出: "f"
  • 示例 3:
    • letters = ["c","f","j"], target = "d"
    • 输出: "f"
  • 提示
    • 2 <= letters.length <= 10000
    • letters[i] 是一个小写字母
    • letters 按非递减顺序排序
    • letters 最少包含两个不同的字母
    • target 是一个小写字母

二、思路分析:

  • 比较字母的大小,其实就是比较字母的ASCII大小
  • 所以首先需要将target字母转化为ASCII表示
  • 然后遍历给定的数组letters,把遍历的当前项转化为ASCIItargetASCII比较,小写字母a - zASCII97 - 122
    • 如果当前的项的ASCII大于targetASCII,就说明当前项字母比目标字母大,返回这个字母
    • 如果遍历到最后一项都没有一个字母的ASCII比他大,按照题目描述的字母一次循环出现的所以a - z后面也是a - z, 直接返回数组的第一项即可

三、AC 代码:

function nextGreatestLetter(letters: string[], target: string): string {
    let targetNum = target.charCodeAt(0);
    for(let i = 0; i < letters.length; i++){
        if(letters[i].charCodeAt(0) > targetNum){
            return letters[i]
        }
        if(i === letters.length - 1 && letters[i].charCodeAt(0) <= targetNum){
            return letters[0]
        }
    }
};

四、总结:

  • 这题还是很简单,主要是要知道字母是不能直接判断大小的,需要将字母转化成一种可以判断的方式,比如ASCII
  • 更多解题方式,移步题解区

企业微信截图_16481048946414.png