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

艾因LeetCode题解大约 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 "";
    }
}