2309. 兼具大小写的最好英文字母
大约 1 分钟
2309. 兼具大小写的最好英文字母
题目描述
给你一个由英文字母组成的字符串 s
,请你找出并返回 s
中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。
最好 英文字母的大写和小写形式必须 都 在 s
中出现。
英文字母 b
比另一个英文字母 a
更好 的前提是:英文字母表中,b
在 a
之 后 出现。
示例 1:
输入:s = "lEeTcOdE"
输出:"E"
解释:
字母 'E' 是唯一一个大写和小写形式都出现的字母。
示例 2:
输入:s = "arRAzFif"
输出:"R"
解释:
字母 'R' 是大写和小写形式都出现的最好英文字母。
注意 'A' 和 'F' 的大写和小写形式也都出现了,但是 'R' 比 'F' 和 'A' 更好。
示例 3:
输入:s = "AbCdEfGhIjK"
输出:""
解释:
不存在大写和小写形式都出现的字母。
提示:
1 <= s.length <= 1000
s
由小写和大写英文字母组成
思路
根据题目的内容,需要统计字母的出现情况,我们可以使用hashmap把出现的字母都存储下来,然后倒序的判断某个大小字母是否都存在map中。
题解
class Solution {
public String greatestLetter(String s) {
boolean[] tep1=new boolean[26];
boolean[] tep2=new boolean[26];
int n=s.length();
for(int i=0;i<n;i++){
if(s.charAt(i)>='a' && s.charAt(i)<='z'){
int idx=s.charAt(i)-'a';
tep1[idx]=true;
}
else{
int idx=s.charAt(i)-'A';
tep2[idx]=true;
}
}
for(int i=25;i>=0;i--){
if(tep1[i] && tep2[i]){
StringBuilder sb=new StringBuilder();
char ans=(char)('A'+i);
sb.append(ans);
return sb.toString();
}
}
return "";
}
}