写点什么

【LeetCode】兼具大小写的最好英文字母 Java 题解

作者:HQ数字卡
  • 2022 年 6 月 19 日
  • 本文字数:1043 字

    阅读完需:约 3 分钟

题目描述

给你一个由英文字母组成的字符串 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"输出:""解释:不存在大写和小写形式都出现的字母。
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/greatest-english-letter-in-upper-and-lower-case著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法题目是字符串处理题目,题目比较长,分析之后,核心如下。1. 返回字符为大写字符或者空字符串。 2. 最好 英文字母的大写和小写形式必须 都 在 s 中出现。3. 字母按照自然序列排序,需要返回自然序大的字母。

  • 根据上述分析,首先我们使用 hashset 记录每一个出现的字符。然后可以使用 ASCII 的知识,对出现的字符进行处理。什么是 ASCII?ASCII 码是一套编码规范。ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。

  • 其中 ASCII 32~126(共 95 个)是字符(32 是空格),其中 48~57 为 0 到 9 十个阿拉伯数字。65~90 为 26 个大写英文字母,97~122 号为 26 个小写英文字母,其余为一些标点符号、运算符号等。

  • 根据 ASCII 码知识,字符大小写的 ASCII 码的差值是 32。我们从 90 开始便利,找打符合题目要求的字符。实现代码如下,供参考。

通过代码

class Solution {    public String greatestLetter(String s) {        Set<Character> set = new HashSet<>();        for (char ch : s.toCharArray()) {            set.add(ch);        }        StringBuilder ans = new StringBuilder();        for (int i = 90; i >= 65; i--) {            if (set.contains((char) i) && set.contains((char) (i + 32))){                ans.append((char) i);                break;            }         }                return ans.toString();            }
复制代码

总结

  • 上述算法的时间复杂度是 O(n),空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 2
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】兼具大小写的最好英文字母Java题解_LeetCode_HQ数字卡_InfoQ写作社区