一、题目
给你一个由英文字母组成的字符串 s
,请你找出并返回 s
中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。
最好 英文字母的大写和小写形式必须 都 在 s
中出现。
英文字母 b
比另一个英文字母 a
更好 的前提是:英文字母表中,b
在 a
之 后 出现。
示例
输入:s = "lEeTcOdE"
输出:"E"
解释:
字母 'E' 是唯一一个大写和小写形式都出现的字母。
提示
- 1 <= s.length <= 1000
- s 由小写和大写英文字母组成
二、题解
方法1(遍历字符串s
)
- 初始化最好字母为
''
- 遍历字符串
s
,寻找大写字母 - 若大写字母对应的小写字母存在,且当前大写字母大于最好字母,就将最好字母替换为当前的大写字母
- 直至遍历完所有字符
/**
* @param {string} s
* @return {string}
*/
var greatestLetter = function (s) {
let bestAlpha = ''
for (let i = 0; i < s.length; i++) {
if (s[i] >= 'A' && s[i] <= 'Z') {
if (s.match(String.fromCharCode( s[i].charCodeAt() + 32)) && (!bestAlpha || bestAlpha < s[i])) {
bestAlpha = s[i]
}
}
}
return bestAlpha
};
方法2(倒序遍历字母表)
- 倒序遍历字母表
- 若当前字母的大小写均存在,则返回当前字母
- 若遍历完,都没有符合条件的字母,则返回
''
/**
* @param {string} s
* @return {string}
*/
var greatestLetter = function (s) {
for (let i = 25; i >= 0; i--) {
if (s.match(String.fromCharCode(i + 'a'.charCodeAt())) &&
s.match(String.fromCharCode(i + 'A'.charCodeAt()))) {
return String.fromCharCode(i + 'A'.charCodeAt());
}
}
return '';
};
三、知识点
字母的Unicode编码
- A ~ Z :65 ~ 90
- a ~ z :97 ~ 122
- 大写字母的Unicode编码+
32
= 小写字母的Unicode编码
字母和Unicode的转换
Unicode编码 → 字符:String.fromCharCode(num)
字母 → Unicode编码 str.charCodeAt()