#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Group Anagrams.
Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],
Return:
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
Note: All inputs will be in lower-case.
'''
class Solution(object):
def find(self,strs,target):
for index,val in enumerate(strs):
if target == val:
return index
return -1
def groupAnagrams(self, strs):
"""
超时了...
:type strs: List[str]
:rtype: List[List[str]]
"""
length = len(strs)
kind = [''.join(sorted(strs[0]))]
flag = [[0]]
for index,val in enumerate(strs[1:]):
target = ''.join(sorted(val))
tmp = self.find(kind,target)
if tmp == -1:
kind.append(target)
flag.append([index + 1])
else:
flag[tmp].append(index + 1)
kind = []
for index,val in enumerate(flag):
kind.append([])
for i in val:
kind[index].append(strs[i])
return kind
def groupAnagrams(self, strs):
"""
利用字典优化上述代码...
:type strs: List[str]
:rtype: List[List[str]]
"""
length = len(strs)
d = {}
for val in strs:
tmp = ''.join(sorted(val))
if d.has_key(tmp):
d[tmp].append(val)
else:
d[tmp] = [val]
return list(d.values())
if __name__ == "__main__":
s = Solution()
print s.groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"])
53 leetcode - Group Anagrams
最新推荐文章于 2024-11-06 23:21:54 发布