[LeetCode]Anagrams

题目描述:

Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

题目大意:

给定一个字符串数组,返回所有互为字谜(anagram,变位词)的字符串的分组。

注意:所有输入只包含小写字母

解题思路:

排序 + 哈希,使用Python的内置函数,例如reduce,filter等,可以简化代码。

解法I(字典+排序):

Python代码:

class Solution:
    # @param {string[]} strs
    # @return {string[]}
    def anagrams(self, strs):
        map = collections.defaultdict(list)
        for s in strs:
            map[''.join(sorted(s))] += s,
        return reduce(operator.add, filter(lambda x : len(x) > 1, map.values()), [])

解法II(使用collections.Counter计数器工具类):

Python代码:

class Solution:
    # @param {string[]} strs
    # @return {string[]}
    def anagrams(self, strs):
        from collections import Counter
        counter = collections.Counter([tuple(sorted(s)) for s in strs])
        return filter(lambda x : counter[tuple(sorted(x))] > 1, strs)

 

本文链接:http://bookshadow.com/weblog/2015/08/03/leetcode-anagrams/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码

Pingbacks已关闭。

暂无评论

张贴您的评论