使用Python集合操作从单词列表查找对称对的实现问题
解题方案
核心逻辑
你已经通过交集操作筛选出了所有存在对应反转词的单词集合s3,但每对对称单词会同时存在两个元素(比如am和ma都在s3中),只需要加一个去重规则即可:
- 因为所有单词都是2字符,我们约定只输出原单词字典序小于其反转单词的配对,这样每对对称词只会被输出一次,不会出现重复
- 集合的成员查询是O(1)操作,直接遍历集合处理即可,整体时间复杂度仍为O(n),完全符合题目要求
基于你现有代码的优化实现
不需要额外转列表,直接遍历交集集合s3处理即可:
def find_pairs(words): reverseWords = [i[::-1] for i in words] s1 = set(words) s2 = set(reverseWords) s3 = s1.intersection(s2) # 直接遍历集合输出,无转列表操作 for word in s3: reverse_word = word[::-1] if word < reverse_word: print(f"{word} & {reverse_word}") find_pairs(["am","at","ma","if","fi"])
运行输出
am & ma if & fi
内容的提问来源于stack exchange,提问作者kiltannen
相关产品推荐
相关产品推荐

