Python字典排序字符串的Anagram

这个问题在这里已经有了答案:

  • 将字符串排列为另外6个答案的子字符串

  • 一个纯粹的Python解决方案,用于获取与字符串中字符的字符数(t)相对应的对象,

    使用函数chr()您可以将int转换为相应的ascii值,因此您可以轻松地使用97123并使用chr()来获取该字母表的值。

    所以如果你有一个字符串说:

    t = "abracadabra"
    

    那么你可以做一个for-loop如:

    dt = {}
    for c in range(97, 123):
       dt[chr(c)] = t.count(chr(c))
    

    这为解决方案的这部分工作回馈了以下结果:

    {'k': 0, 'v': 0, 'a': 5, 'z': 0, 'n': 0, 't': 0, 'm': 0, 'q': 0, 'f': 0, 'x': 0, 'e': 0, 'r': 2, 'b': 2, 'i': 0, 'l': 0, 'h': 0, 'c': 1, 'u': 0, 'j': 0, 'p': 0, 's': 0, 'y': 0, 'o': 0, 'd': 1, 'w': 0, 'g': 0}
    

    不同的解决方案?

    评论是受欢迎的,但为什么存储在一个dict必要的? 使用count() ,你不能简单地比较t每个char的计数和s中char的计数吗? 如果tchar的计数大于s返回False else True

    沿着以下方向的东西:

    def question1(s, t):
       for c in range(97, 123):
          if t.count(chr(c)) > s.count(chr(c)):
             return False
       return True
    

    这给出了结果:

    >>> question1("udacity", "city")
    True
    >>> question1("udacity", "ud")
    True
    >>> question1("udacity", "ljljl")
    False
    

    如果需要dict ...

    如果是这样,那么就像上面那样创建两个并遍历每个键......

    def question1(s, t):
       ds = {}
       dt = {}
       for c in range(97, 123):
          ds[chr(c)] = s.count(chr(c))
          dt[chr(c)] = t.count(chr(c))
       for c in range(97, 123):
          if dt[chr(c)] > ds[chr(c)]:
             return False
       return True
    

    更新

    上面的答案只检查子字符不是SUBSTRING的字符。 正如马拉卡在评论中向我解释的那样,这两者之间有所区别,你的例子清楚地表明了这一点。

    使用滑动窗口的想法(通过切分字符串),下面的代码应该适用于子字符串

    def question1(s, t):
       dt = {}
       for c in range(97, 123):
          dt[chr(c)] = t.count(chr(c))
       for i in range(len(s) - len(t) + 1):
          contains = True
          for c in range(97, 123):
             if dt[chr(c)] > s[i:i+len(t)].count(chr(c)):
                contains = False
                break
          if contains:
             return True
       return False
    

    上面的代码适用于所有情况,并使用字典来加速正确的计算:)


    import collections
    print collections.Counter("google")
    
    Counter({'o': 2, 'g': 2, 'e': 1, 'l': 1})
    
    链接地址: http://www.djcxy.com/p/40069.html

    上一篇: Python dictionary sorting Anagram of a string

    下一篇: What is the Big Oh of these two implementations of the same algorithm?