【leetcode】NO.2135 统计追加字母可以获得的单词数(Python) [周赛]

题目 2135. 统计追加字母可以获得的单词数

给你两个下标从 0 开始的字符串数组 startWords 和 targetWords 。每个字符串都仅由 小写英文字母 组成。

对于 targetWords 中的每个字符串,检查是否能够从 startWords 中选出一个字符串,执行一次 转换操作 ,得到的结果与当前 targetWords 字符串相等。

转换操作 如下面两步所述:

追加 任何 不存在 于当前字符串的任一小写字母到当前字符串的末尾。
    例如,如果字符串为 "abc" ,那么字母 'd'、'e' 或 'y' 都可以加到该字符串末尾,但 'a' 就不行。如果追加的是 'd' ,那么结果字符串为 "abcd" 。
重排 新字符串中的字母,可以按 任意 顺序重新排布字母。
    例如,"abcd" 可以重排为 "acbd"、"bacd"、"cbda",以此类推。注意,它也可以重排为 "abcd" 自身。

找出 targetWords 中有多少字符串能够由 startWords 中的 任一 字符串执行上述转换操作获得。返回 targetWords 中这类 字符串的数目 。

注意:你仅能验证 targetWords 中的字符串是否可以由 startWords 中的某个字符串经执行操作获得。startWords 中的字符串在这一过程中 不 发生实际变更。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-words-obtained-after-adding-a-letter
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

将开始字符串和目标字符串进行排序,这样方便之后进行比较;
遍历target字符串,对每个字符按顺序去掉其中一个字符再进行拼接,如果字符在start字符中出现,说明可以使用start中的字符变换得到;ans+=1

代码


class Solution:
    def wordCount(self, startWords: List[str], targetWords: List[str]) -> int:
        # 对每个字符进行排序
        start = set(''.join(sorted(s)) for s in startWords)
        # target = ''.join(sorted(s)) for s in targetWords
        ans = 0
        for s in targetWords:
            w = ''.join(sorted(s))
            if any((w[:i] + w[i+1:]) in start for i in range(len(w))):
                ans += 1
        return ans
posted @ 2022-01-11 09:12  jucw  阅读(89)  评论(0编辑  收藏  举报