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 <= 10000letters[i]是一个小写字母letters按非递减顺序排序letters最少包含两个不同的字母target是一个小写字母
二、思路分析:
- 比较字母的大小,其实就是比较字母的
ASCII大小 - 所以首先需要将
target字母转化为ASCII表示 - 然后遍历给定的数组
letters,把遍历的当前项转化为ASCII和target的ASCII比较,小写字母a - z的ASCII是97 - 122;- 如果当前的项的
ASCII大于target的ASCII,就说明当前项字母比目标字母大,返回这个字母 - 如果遍历到最后一项都没有一个字母的
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 - 更多解题方式,移步题解区