LeetCode #1566. Detect Pattern of Length M Repeated K or More Times

题目

1566. Detect Pattern of Length M Repeated K or More Times


解题方法

从头开始遍历arr到len(arr)-m位置为止,每次取m个元素做成元组,然后以m为步长向后找元组,如果不相等就返回,否则将剩余需要匹配的次数减一,最后判断一下剩余次数是否减到0了,如果是说明此次找到了题意匹配的多个模式,返回True,遍历结束还没找到的话返回False。
时间复杂度:O(n^2)
空间复杂度:O(1)


代码

class Solution:
    def containsPattern(self, arr: List[int], m: int, k: int) -> bool:
        for i in range(len(arr) - m + 1):
            pattern = tuple(arr[i:i + m])
            remain = k - 1
            for j in range(i + m, len(arr) - m + 1, m):
                if tuple(arr[j:j + m]) != pattern:
                    break
                else:
                    remain -= 1
                    if not remain: break
            if not remain:
                return True
        return False
posted @ 2020-12-02 14:50  老鼠司令  阅读(92)  评论(0)    收藏  举报