Skip to content

Commit 1cae44c

Browse files
solves detect pattern of length m repeated k or more times
1 parent 592e9d5 commit 1cae44c

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -392,3 +392,4 @@
392392
| 1550 | [Three Consecutive Odds](https://leetcode.com/problems/three-consecutive-odds) | [![Java](assets/java.png)](src/ThreeConsecutiveOdds.java) | |
393393
| 1556 | [Thousand Separator](https://leetcode.com/problems/thousand-separator) | [![Java](assets/java.png)](src/ThousandSeparator.java) | |
394394
| 1560 | [Most Visited Sector in a Circular Track](https://leetcode.com/problems/most-visited-sector-in-a-circular-track) | [![Java](assets/java.png)](src/MostVisitedSectorInACircularTrack.java) | |
395+
| 1566 | [Detect Pattern of Length M Repeated K or More Times](https://leetcode.com/problems/detect-pattern-of-length-m-repeated-k-or-more-times) | [![Java](assets/java.png)](src/DetectPatternOfLengthMRepeatedKOrMoreTimes.java) | |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// https://leetcode.com/problems/detect-pattern-of-length-m-repeated-k-or-more-times
2+
// T: O(nm^2k)
3+
// s: O(1)
4+
5+
public class DetectPatternOfLengthMRepeatedKOrMoreTimes {
6+
public boolean containsPattern(int[] arr, int m, int k) {
7+
if (m * k > arr.length || m > arr.length) return false;
8+
if (k == 1) return true;
9+
10+
for (int i = 0 ; i < arr.length - m * k + 1 ; i++) {
11+
if (consistsOfPattern(arr, i, m, k)) {
12+
return true;
13+
}
14+
}
15+
return false;
16+
}
17+
18+
private boolean consistsOfPattern(int[] array, int startIndex, int patternLen, int k) {
19+
for (int j = startIndex + patternLen ; j <= startIndex + (k - 1) * patternLen ; j += patternLen) {
20+
if (!arrayIsSame(array, startIndex, j, patternLen)) {
21+
return false;
22+
}
23+
}
24+
return true;
25+
}
26+
27+
private boolean arrayIsSame(int[] array, int i, int j, int patternLen) {
28+
for (int k = 0 ; k < patternLen ; k++) {
29+
if (array[i + k] != array[j + k]) {
30+
return false;
31+
}
32+
}
33+
return true;
34+
}
35+
}

0 commit comments

Comments
 (0)