1. 程式人生 > 實用技巧 >LeetCode #1566. Detect Pattern of Length M Repeated K or More Times

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