2014-03-03 198 views
-1

出现在两个字符串数我需要帮助写一个定义的两个字符串参数出现次数的函数。该函数返回第二个参数中出现第一个参数的字符的次数。使用for循环

实施例:occurances( '上当', '世界你好')应该评估至7(1 'E',3 '1',2 'O',1 'd')

需要结合一个'for循环'。


感谢大家的帮助,非常感谢!

+6

你尝试过什么?看起来这是作业,请显示你被困住的代码。 – msvalkon

+0

@ user3374113如果您在编辑问题时尝试编辑,人们会更容易接受。 – Guy

+0

对于[参考](http://meta.stackexchange.com/questions/223856/questions-on-so-asking-us-to-code) – Guy

回答

2

列表解析的方法:

In [738]: def occurances(fst, sec): 
    ...:  return sum(sec.count(c) for c in set(fst)) 

In [739]: occurances('fooled','hello world') 
Out[739]: 7 

使它到一个for循环:

def occurances(fst, sec): 
    osum=0 
    for c in set(fst): 
     #try it yourself :) 
    return osum 

或者作为@SvenMarnach和@JayanthKoushik提到的,如果不使用set

In [738]: def occurances(fst, sec): 
    ...:  return sum(c in fst for c in sec) 

这也与O(MN)在时间(米运行中,n为fst长度和sec)。您可以通过fst一个set使其O(M + N):

In [738]: def occurances(fst, sec): 
    ...:  fst=set(fst) 
    ...:  return sum(c in fst for c in sec) #checking "in set" is O(1) 
+0

理解不需要使用设置。你可以只是做:LEN([C为秒c。如果下在FST]) –

+0

也不需要为一组,如果您的解决方案是O(MN)反正。只要'总和(c in fst for c in sec)'就可以了。尽管在这之前执行'fst = set(fst)',你可以使用一个集合来减少时间复杂度为O(m + n)。 –

+0

@SvenMarnach不会使用设置的原因**多个**输出?像这样:'(1'e',1'e'....)'? – Guy

0

只需使用一个defaultdict和计数的出现,如果第一个元素出现在第二位。再总结所有的值:

from collections import defaultdict 

ele_count = defaultdict(int) 
def occurances(first, second): 
    count = 0 
    for ele in second: 
    if ele in first: 
     ele_count[ele] += 1 

    for item in ele_count.values(): 
    count += item 

    print count