【每日一题Day100】LC2309兼具大小写的最好英文字母 | 哈希表 位运算

简介: 实现:使用两个int类型变量记录每个字母的大小写是否出现过

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


Given a string of English letters s, return the greatest English letter which occurs as both a lowercase and uppercase letter in s. The returned letter should be in uppercase. If no such letter exists, return an empty string.


An English letter b is greater than another letter a if b appears after a in the English alphabet.


DAY100啦 最近家里事情好多 哎


  • 思路:使用int数组记录每个字母的大小写形式是否出现过,若小写出现过那么最低位为1,若大写出现过那么第二位为1,因此如果某个字母的大小写都出现在字符串中,那么哈希表中数值为3。倒叙遍历字母表,返回首个哈希表值等于3的字母的大写形式即可


  • 实现


class Solution {
    public String greatestLetter(String s) {
        String ans = "";
        int[] map = new int[26];
        for (char c : s.toCharArray()){
            if (c >= 'a' && c <= 'z'){
                map[c - 'a'] |= 1;
            }else{
                 map[c - 'A'] |= 2;
            }
        }
        for (int i = 25; i >= 0; i--){
            if (map[i] == 3){
                ans += (char)('A' + i);
                return ans;
            }
        }
        return ans;
    }
}


。复杂度


  • 时间复杂度:O(n+C),n、m为字符串长度
  • 空间复杂度:O(C),C为字符集大小,本题中为26


  • 实现:使用两个int类型变量记录每个字母的大小写是否出现过


class Solution {
public:
    string greatestLetter(string s) {
        int lower = 0, upper = 0;
        for (auto c : s) {
            if (islower(c)) {
                lower |= 1 << (c - 'a');
            } else {
                upper |= 1 << (c - 'A');
            }
        }
        for (int i = 25; i >= 0; i--) {
            if (lower & upper & (1 << i)) {
                return string(1, 'A' + i);
            }
        }
        return "";
    }
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/greatest-english-letter-in-upper-and-lower-case/solutions/2076006/jian-ju-da-xiao-xie-de-zui-hao-ying-wen-o5u2s/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


。复杂度


  • 时间复杂度:O(n+C),n、m为字符串长度,C为字符集大小,本题中为26
  • 空间复杂度:O(1)
目录
相关文章
|
5月前
【每日一题Day370】LC318最大单词长度乘积 | 哈希表 位运算
【每日一题Day370】LC318最大单词长度乘积 | 哈希表 位运算
51 1
|
5月前
【每日一题Day205】LC2441与对应负数同时存在的最大正整数 | 哈希表
【每日一题Day205】LC2441与对应负数同时存在的最大正整数 | 哈希表
44 1
|
5月前
【每日一题Day136】LC982按位与为零的三元组 | 哈希表
【每日一题Day136】LC982按位与为零的三元组 | 哈希表
57 0
|
5月前
【每日一题Day203】LC1016子串能表示从 1 到 N 数字的二进制串 | 枚举 哈希表
【每日一题Day203】LC1016子串能表示从 1 到 N 数字的二进制串 | 枚举 哈希表
46 2
|
5月前
【每日一题Day143】面试题 17.05. 字母与数字 | 前缀和+哈希表
【每日一题Day143】面试题 17.05. 字母与数字 | 前缀和+哈希表
37 0
|
5月前
【每日一题Day317】LC2605从两个数字数组里生成最小数字 | 哈希表
【每日一题Day317】LC2605从两个数字数组里生成最小数字 | 哈希表
39 0
|
5月前
【每日一题Day172】LC2399检查相同字母间的距离 | 哈希表
【每日一题Day172】LC2399检查相同字母间的距离 | 哈希表
40 0
数据结构91-字母转数字的方案
数据结构91-字母转数字的方案
42 0
数据结构91-字母转数字的方案
|
机器学习/深度学习
【每日一题Day55】LC1832判断句子是否为全字母 | 哈希表 位运算
思路:使用一个int类型的变量state代替哈希表,该变量是长度为26的二进制数字,它的第i ii位对应字母表的第i ii个字母,当为1时代表该字母存在;最后当state的所有位均为1时,返回true
88 0