讨论/题目交流/🏆 第 182 场力扣周赛/
🏆 第 182 场力扣周赛

欢迎小伙伴们在这里交流分享你的参赛心得以及体验。【前往竞赛

image.png

3 分 - 找出数组中的幸运数
4 分 - 统计作战单位数
5 分 - 设计地铁系统
8 分 - 找到所有好字符串

最后一题第39个样例过不去,前面都过了,我少考虑了什么?

class Solution:
    def findGoodStrings(self, n: int, s1: str, s2: str, evil: str) -> int:
        MOD = 10 ** 9 + 7
        lz = len(evil)
        SS = "abcdefghijklmnopqrstuvwxyz"
        
        def P(s):
            index = 0
            pnext = [0] * lz
            i = 1
            while i < lz:
                if s[i] == s[index]:
                    pnext[i] = index = index + 1
                    i += 1
                elif index != 0:
                    index = pnext[index - 1]
                else:
                    pnext[i] = 0
                    i += 1
            return pnext
        
        @lru_cache(None)
        def D(ch, z):
            while z:
                if ch == evil[z]:
                    return z + 1
                z = pnext[z]
            return ch == evil[z]
                
        @lru_cache(None)
        def F(l, z, b1, b2):
            if z == lz:
                return 0
            if l == n:
                return 1
            res = 0
            for ch in SS:
                if b1 and s1[l] > ch or b2 and s2[l] < ch:
                    continue
                res += F(l + 1 , D(ch, z), b1 and s1[l] == ch, b2 and s2[l] == ch)
            return res % MOD
        
        pnext = P(evil)
        return F(0, 0, 1, 1) % MOD
展开全部 31 讨论