Kata Daily 190917Numericals of a String(字符出现的次数)

Posted bcaixl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kata Daily 190917Numericals of a String(字符出现的次数)相关的知识,希望对你有一定的参考价值。

题目:

You are given an input string.

For each symbol in the string if it‘s the first character occurence, replace it with a ‘1‘, else replace it with the amount of times you‘ve already seen it...

But will your code be performant enough?


Examples:

input   =  "Hello, World!"
result  =  "1112111121311"

input   =  "aaaaaaaaaaaa"
result  =  "123456789101112"

题目大意:将字符出现的次数打印出来,以数字1,2,3,,,表示

 

解题办法:(再想想,也许就出来了)

def numericals(s):
    # code
    dic = 
    L = []
    for i in s:
        if i not in dic.keys():
            dic[i] = 1
            L.append(dic[i])
        else:
            dic[i] += 1
            L.append(dic[i])
    return ‘‘.join([str(x) for x in L])

用时:1小时3分51秒,,,真长。。。

看下别人的解法:

1、使用defaultdict

from collections import defaultdict

def numericals(s):
    d, lst = defaultdict(int), []
    for c in s:
        d[c] += 1
        lst.append(d[c])
    return ‘‘.join(map(str, lst))

2、使用生成器

from collections import Counter

def numericals(s):
    def f(s):
        cnts = Counter()
        for c in s:
            cnts[c] += 1
            yield cnts[c]
    return ‘‘.join(map(str, f(s)))

 

知识点:

1、使用计数count

2、字典可以使用特殊字符作为key

3、将一个list转化为str:

  3.1、如果list中有数值,需要转为str,可以使用遍历:

str(x) for x in L

  3.2、可以使用map

map(str, L)
‘‘.join(str(x) for x in L)


‘‘.join(map(str, L))

 

以上是关于Kata Daily 190917Numericals of a String(字符出现的次数)的主要内容,如果未能解决你的问题,请参考以下文章

Kata Daily 190923Odder Than the Rest(找出奇数)

Kata Daily 191012Find numbers which are divisible by given number

Kata 架构

认识kata-containers

从kata中学习编程

kata namespace