LeetCode 中级算法(数组和字符串)-字谜分组

字谜分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

Python:

第一次解法:超时的

class Solution(object):
    def groupAnagrams(self, strs):
        """
        :type strs: List[str]
        :rtype: List[List[str]]
        """
        result = []
        letter_list = []
        temp_list = []

        str_myset = set(strs)
        if len(set(strs)) == 1:
            for value in strs:
                letter_list.append(value)
            result.append(letter_list)
            return result
        for w in range(ord("a"),ord("z") + 1):
            letter_list.append(chr(w))
        
        res = []
        dic_set = []
        for str_value in strs:
            dic_val = {}
            if str_value == "":
                temp_list.append(str_value)
                pass

            for char in str_value:
                if char in dic_val:
                    dic_val[char] +=1
                else:
                    dic_val[char] = 1
            if dic_val not in res and len(dic_val) > 0:
                dic_set.append(dic_val)
            res.append(dic_val)

        for value in dic_set:
            lis_a = []
            for idx in range(len(res)):
                if value == res[idx]:
                    lis_a.append(strs[idx])
                pass
            result.append(lis_a)
        if len(temp_list) > 0:
            result.append(temp_list)
        return result

优化后的:
还是超时!!??

class Solution(object):
    def groupAnagrams(self, strs):
        """
        :type strs: List[str]
        :rtype: List[List[str]]
        """
        length_d = len(strs)
        sorted_list = []
        res = []
        for i in range(length_d):
            if sorted(strs[i]) not in sorted_list:
                sorted_list.append(sorted(strs[i]))
        for value in sorted_list:
            list_a = []
            for i in range(length_d):
                if value == sorted(strs[i]):
                    list_a.append(strs[i])
            res.append(list_a)
        return res

再次优化:

class Solution(object):
    def groupAnagrams(self, strs):
        """
        :type strs: List[str]
        :rtype: List[List[str]]
        """
        length_d = len(strs)
        sorted_list = []
        res = []
        for i in range(length_d):
            lis_a = []
            if sorted(strs[i]) not in sorted_list:
                sorted_list.append(sorted(strs[i]))
            index = sorted_list.index(sorted(strs[i]))
            if len(res) > index:
                res[index].append(strs[i])
                pass
            else:
                lis_a.append(strs[i])
                res.append(lis_a)
        return res

??勉强过

再再再再。。次优化:

class Solution(object):
    def groupAnagrams(self, strs):
        """
        :type strs: List[str]
        :rtype: List[List[str]]
        """
        res = {}
        for value in strs:
            list_a = []
            char = "".join(sorted(value))
            if char not in res:
                list_a.append(value)
                res[char] = list_a
            else:
                res[char].append(value)
        # print(res)
        return res.values()

下面是大佬的:
1:

class Solution(object):
    def groupAnagrams(self, strs):
        """
        :type strs: List[str]
        :rtype: List[List[str]]
        """
        hash = {}
        for str in strs:
            char = ''.join(sorted(str))
            if char not in hash:
                hash[char] = [str]
            else:
                hash[char].append(str)
                
        return hash.values()

2:

class Solution(object):
    def groupAnagrams(self, strs):
        """
        :type strs: List[str]
        :rtype: List[List[str]]
        """
        dic = dict()
        result = []
        classnum = 0
        
        for item in strs:
            l = list(item)
            l.sort()
            string = str(l)
            if dic.has_key(string):
                result[dic[string]].append(item)
            else:
                dic[string] = classnum
                result.append([item])
                classnum += 1
                
        return result

你可能感兴趣的:(LeetCode,Python)