2273. 移除字母异位词后的结果数组 - 力扣(LeetCode)



我们可以通过栈来模拟这个过程。由于每次删除的元素必须满足:
-
位置
i满足0 < i < words.length -
且
words[i - 1]和words[i]是字母异位词
我们发现,这个过程实际上可以用“前一个和当前是字母异位词就删当前”来模拟,并且从左往右扫描,每次判断当前元素和栈顶是否是异位词,是就把栈顶弹出,然后继续,不是就入栈。
判断字母异位词
两个单词是字母异位词,当且仅当它们每个字母出现的次数相同。我们可以用 collections.Counter 来判断。
Python 实现
from collections import Counter
def are_anagrams(word1, word2):
return Counter(word1) == Counter(word2)
def remove_anagrams(words):
stack = []
for word in words:
if stack and are_anagrams(stack[-1], word):
continue # 当前 word 是前一个的异位词,不加入结果
stack.append(word) # 否则保留
return stack
示例
words = ["ab", "ba", "cd", "dc", "ef", "fe", "gh"]
print(remove_anagrams(words))
# 输出: ['ab', 'cd', 'ef', 'gh']
这些字母异位词中,第一个被保留,后面与其是异位词的都被删掉了。
Python实现移除字母异位词结果数组
797

被折叠的 条评论
为什么被折叠?



