The Most Wanted Letter

题目

The Most Wanted Letter

思路

  • 不需要提前用lower方法来全部小写化,在大数据量时比较慢,直接遍历一次分别判断统计就行。统计count存在长度为26的list中,下标表示偏移量,最后遍历count list来求最高频的字母
  • 其实像具体字符的ASCII固定的order(),len()固定的可以硬编码写死,效率高很多,不用每次循环都去调,但是编码规范,可读性这些又太差了

我的代码

def checkio(text):
    count_list = [0 for i in range(26)]
    for letter in text:
        if 'a' <= letter <= 'z':
            count_list[ord(letter) - ord('a')] += 1
        elif 'A' <= letter <= 'Z':
            count_list[ord(letter) - ord('A')] += 1

    max_index = 0
    index = 0
    max_value = 0
    while index < len(count_list):
        if count_list[index] > max_value:
            max_index = index
            max_value = count_list[index]

        index += 1

    #没有字母的字符串
    if  max_value == 0:
        return ''
    else:
        return chr(ord('a') + max_index)

if __name__ == '__main__':
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert checkio("Hello World!") == "l", "Hello test"
    assert checkio("How do you do?") == "o", "O is most wanted"
    assert checkio("One") == "e", "All letter only once."
    assert checkio("Oops!") == "o", "Don't forget about lower case."
    assert checkio("AAaooo!!!!") == "a", "Only letters."
    assert checkio("abe") == "a", "The First."
    print("Start the long test")
    assert checkio("a" * 9000 + "b" * 1000) == "a", "Long."
    print("The local tests are done.")

clear code

import string

def checkio(text):
    """
    We iterate through latyn alphabet and count each letter in the text.
    Then 'max' selects the most frequent letter.
    For the case when we have several equal letter,
    'max' selects the first from they.
    """
    text = text.lower()
    return max(string.ascii_lowercase, key=text.count)

creative code

def checkio(text):
    r = {c: text.lower().count(chr(c)) for c in range(97, 123)}
    return chr(max(r, key=r.__getitem__ ))

自己写的感觉还是在用C的思路写,python自带的API,轮子这些还是不熟悉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值