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

159 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情

题目描述

给你一个由英文字母组成的字符串 s ,请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。
最好 英文字母的大写和小写形式必须 都 在 s 中出现。
英文字母 b 比另一个英文字母 a 更好 的前提是:英文字母表中,b 在 a 之 后 出现。
来源:力扣(LeetCode)

  • 示例 1
输入:s = "lEeTcOdE"
输出:"E"
解释:
字母 'E' 是唯一一个大写和小写形式都出现的字母。
  • 示例 2
输入:s = "arRAzFif"
输出:"R"
解释:
字母 'R' 是大写和小写形式都出现的最好英文字母。
注意 'A''F' 的大写和小写形式也都出现了,但是 'R''F''A' 更好
  • 示例 3
输入: s = "AbCdEfGhIjK"
输出: ""
解释:
不存在大写和小写形式都出现的字母。

思路分析

根据题意可知,题目给出一个纯英文字母的字符串strs,需要我们在此字符串中找出最好英文字母;啥是最好英文,就是在字符串strs中,既出现了小写字母,又出现了这个小写字母对应的大写字母。
声明一个空数组arr用来存储最好英文字母。循环字符串,在每一次循环中,无论是大写字母或者是小写字母都转换为一个大写和一个小写,这样方便比较;判断小写字母是否在此字符串中,判断当前字母是否是大写字母,若两个条件都相等,那么可以将此字母添加到数组arr中。最后将数组arr排序,位置靠后的字母就排在后面,取数组最后一个,若是数组空,就取空字符串。

AC代码

function solution(strs) {
    let arr = [];
    for(let i=0; i<strs.length; i++) {
        let big = strs[i].toUpperCase();
        let small = strs[i].toLowerCase();
        const flag = s.indexOf(small) !== -1;
        if(flag && big === strs[i]) {
            arr.push(strs[i]);
        }
    }
    if(arr.length > 0) {
        console.log(arr.sort()[arr.length-1]);
        return arr.sort()[arr.length-1];
    }else{
        return ''
    }
    console.log(arr)
}
let s = "arRAzFif";
solution(s);