python-leetcode-2273. 移除字母异位词后的结果数组

Python实现移除字母异位词结果数组

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']

这些字母异位词中,第一个被保留,后面与其是异位词的都被删掉了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值