使用 List 和 Dictionary 在Python中一起打印字谜
给定一个单词数组,一起打印所有字谜?例子:
Input : arr = ['cat', 'dog', 'tac', 'god', 'act']
Output : 'cat tac act dog god'
这个问题有现有的解决方案,请参考 Anagrams 和 Given a sequence of words, print all anagrams together links。我们将在Python中使用 List 和 Dictionary 数据结构来解决这个问题。方法很简单:
- 遍历字符串列表。
- 将每个字符串按升序排序,并将排序后的值视为Key ,将原始值视为对应键的Value 。检查字典中是否不存在键,这意味着它是第一次出现,因此将一个空列表映射到键并在其中附加值,如果键已经存在,则简单地附加值。
- 现在每个键都将包含一个字谜字符串列表。
Python3
# Function to return all anagrams together
def allAnagram(input):
# empty dictionary which holds subsets
# of all anagrams together
dict = {}
# traverse list of strings
for strVal in input:
# sorted(iterable) method accepts any
# iterable and returns list of items
# in ascending order
key = ''.join(sorted(strVal))
# now check if key exist in dictionary
# or not. If yes then simply append the
# strVal into the list of it's corresponding
# key. If not then map empty list onto
# key and then start appending values
if key in dict.keys():
dict[key].append(strVal)
else:
dict[key] = []
dict[key].append(strVal)
# traverse dictionary and concatenate values
# of keys together
output = ""
for key,value in dict.items():
output = output + ' '.join(value) + ' '
return output
# Driver function
if __name__ == "__main__":
input=['cat', 'dog', 'tac', 'god', 'act']
print (allAnagram(input))
输出:
'cat tac act dog god'