Monkey Typing

题目

Monkey Typing

一些思路

本质上是一个判断字符串是否包含子字符串的问题,可以用str.find(),str.index(), xx in xxx 等方法

我的代码

def count_words(text: str, words: set) -> int:
    #依次判断words里面的word是否在text出现
    count = 0
    text = text.lower()

    for word in words:
        if word in text:
            count += 1

    return count


if __name__ == '__main__':
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert count_words("How aresjfhdskfhskd you?", {"how", "are", "you", "hello"}) == 3, "Example"
    assert count_words("Bananas, give me bananas!!!", {"banana", "bananas"}) == 2, "BANANAS!"
    assert count_words("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
                       {"sum", "hamlet", "infinity", "anything"}) == 1, "Weird text"
    print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")

clear code

用了序列化,一行搞定

def count_words(text, words):
    return sum(w in text.lower() for w in words)

creative code

lambda表示

count_words=lambda t,W:sum(w in t.lower()for w in W)

speedy code

  • 用了filter函数,一个原因可能是用了内置的C代码,大数据量的时候会快很多。但这个方法一个是会创建tuple,耗时还有大数据量可能会占用很多内存,还有一个在用count函数时涉及到一个指针遍历字符串的问题。
  • 我的方法在循环外面先把text小写化,所以这个方法和我的比起来还是要慢一些,做了下测试也是如此
def count_words(text, words):
    return len(list(filter(text.lower().count, words)))
  • 测试结果,1是我的代码时间,2是用filter的时间:
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值