2309

给你一个由英文字母组成的字符串 s ,请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。

最好 英文字母的大写和小写形式必须  在 s 中出现。

英文字母 b 比另一个英文字母 a 更好 的前提是:英文字母表中,b 在 a 之  出现。

输入:s = "arRAzFif"
输出:"R"
解释:
字母 'R' 是大写和小写形式都出现的最好英文字母。
注意 'A' 和 'F' 的大写和小写形式也都出现了,但是 'R' 比 'F' 和 'A' 更好。

第一遍
class Solution(object):
    def greatestLetter(self, s):
        """
        :type s: str
        :rtype: str
        """
        bei=set()
        for char in s:
            if(char.lower()in s and char.upper()in s):
                bei.add(char.upper())
        if(len(bei)==0):
            return ""
        else:      
            return max(bei)

bei存储备选的字母(即符合大小写都出现的字母) 用集合实现去重 实际上不去应该也可以

 

第二遍
class Solution(object):
    def greatestLetter(self, s):
        """
        :type s: str
        :rtype: str
        """
        bei=set()
        hou=set()
        for cha in s:
            hou.add(cha)
        for char in hou:
            if(char.lower()in s and char.upper()in s):
                bei.add(char.upper())
        if(len(bei)==0):
            return ""
        else:      
            return max(bei)

先进行一遍筛选 利用集合去重 可减少比较的次数

 

 

 

 速度有提升 内存太差劲了

第三遍


class Solution(object):
    def greatestLetter(self, s):
        """
        :type s: str
        :rtype: str
        """
        hou=set()
        r=''
        for cha in s:
            hou.add(cha)
        for char in hou:
            if(char.lower()in s and char.upper()in s):
                if(char.upper()>r):
                    r=char.upper()
        return r
不再用单独的集合存储 实时更新要返回的r

 

 

 

 

 

posted on 2023-01-27 21:44  YuhangLiuCE  阅读(78)  评论(0)    收藏  举报

导航