JavaScript算法33- 兼具大小写的最好英文字母(leetCode:2309简单)周赛

2309. 兼具大小写的最好英文字母

一、题目

给你一个由英文字母组成的字符串 s ,请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。

最好 英文字母的大写和小写形式必须 s 中出现。

英文字母 b 比另一个英文字母 a 更好 的前提是:英文字母表中,ba 出现。

示例

输入: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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值