题目:原题链接(困难)

标签:哈希表、位运算

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( W × L × l o g L + P × 2 7 × 7 × l o g 7 ) O(W×L×logL+P×2^7×7×log7) O(W×L×logL+P×27×7×log7) : 其中L为谜底长度 O ( W × L + 2 7 × 7 ) O(W×L+2^7×7) O(W×L+27×7) 916ms (35.29%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:
    def findNumOfValidWords(self, words: List[str], puzzles: List[str]) -> List[int]:
        def all_chance(chars):
            lst = [chars[0]]
            chars = list(sorted(set(chars[1:])))
            size = len(chars)
            res = []

            def recursion(i):
                if i == size:
                    res.append("".join(sorted(lst)))
                else:
                    lst.append(chars[i])
                    recursion(i + 1)
                    lst.pop()
                    recursion(i + 1)

            recursion(0)

            return res

        count = collections.Counter()
        for word in words:
            count["".join(sorted(set(word)))] += 1

        ans = []
        for puzzle in puzzles:
            now = 0
            for chance in all_chance(puzzle):
                now += count[chance]
            ans.append(now)

        return ans