2016-02-12 359 views
0

我試圖以最有效的方式解決此問題。在另一個字符串中查找一個字符串的字符串

找到,如果給定的字符串包含另一個字符串較小

我的做法是創建更小的字符串(S2)和該字符串的出現次數的哈希表/字典的字謎。 遍歷給定的字符串(s1)並查看是否找到了散列表中的所有字符。

現在我的代碼的運行時間是O(3N)和O(N)多餘的空間。我想知道是否有更好的方法來解決這個問題。

def contains_anagram(s1, s2): 
    characters = {} 
    for i in s2: 
     if i in characters: 
      characters[i] += 1 
     else: 
      characters[i] = 1 
    for i in s1: 
     if i in characters: 
      characters[i] -= 1 
     else: 
      continue 
    for i in characters: 
     if characters[i] > 0: 
      return False 
    return True 

回答

2

如果你不關心的實現細節,

from collections import Counter 

def contains_anagram(s1, s2): 
    return len(list((Counter(s1) & Counter(s2)).elements())) == len(s2) 
相關問題