怎么用python实现:题目描述 一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的Anigram,例如单词army和mary互为Anigram。现在给定一个字典,输入Q个单词,从给出的字典中找出这些单词的Anigram。 要求该功能用函数实现,传含Q个单词的字典,传单词,在字典中找出单词互为Anigram的单词个数,并返回结果(单词不与自身互为Anigram)。 输入 第1行:1个数N,表示字典中单词的数量。(1 <= N <= 10000) 第2 - N + 1行,字典中的单词,单词长度 <= 10。 第N + 2行:查询的数量Q。(1 <= Q <= 10000) 第N + 3 - N + Q - 2行:用作查询的单词,单词长度 <= 10。 输出 共Q行,输出Anigram的数量,相同的2个单词不算Anigram,如果没有输出0。
时间: 2024-03-03 12:50:10 浏览: 123
可以使用Python中的字典来实现。具体步骤如下:
1. 遍历字典中的每个单词,将其按照字母排序,得到排序后的单词作为key,将原单词作为value,存储在字典中。
2. 对于每个查询单词,也将其按照字母排序,得到排序后的单词作为key,在字典中查找是否存在对应的value,如果存在则表示这两个单词是互为Anigram的。
3. 需要注意的是,单词不与自身互为Anigram,因此在查找时需要排除自身。
下面是实现该功能的代码:
```python
def find_anagram(dic, query):
word_dict = {}
for word in dic:
sorted_word = ''.join(sorted(word))
if sorted_word not in word_dict:
word_dict[sorted_word] = [word]
else:
word_dict[sorted_word].append(word)
res = []
for q in query:
sorted_q = ''.join(sorted(q))
if sorted_q in word_dict:
cnt = len(word_dict[sorted_q])
if cnt == 1 and word_dict[sorted_q][0] == q:
res.append(0)
else:
res.append(cnt)
else:
res.append(0)
return res
# 测试代码
N = int(input())
dic = []
for i in range(N):
dic.append(input().strip())
Q = int(input())
query = []
for i in range(Q):
query.append(input().strip())
res = find_anagram(dic, query)
for r in res:
print(r)
```
其中,输入的格式与题目描述中一致。输出的结果按照查询的顺序依次输出,每个结果占一行。
阅读全文