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