开启掘金成长之旅!这是我参与「掘金日新计划 · 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);