题目链接:LeetCode 1566. 重复至少 K 次且长度为 M 的模式
题意:
给你一个正整数数组 arr
,请你找出一个长度为 m
且在数组中至少重复 k
次的模式。
模式 是由一个或多个值组成的子数组(连续的子序列),连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。
如果数组中存在至少重复 k
次且长度为 m
的模式,则返回 true
,否则返回 false
。
解题思路;
将数组拼接成字符串,然后从总串中查看。
class Solution {
/**
* @param Integer[] $arr
* @param Integer $m
* @param Integer $k
* @return Boolean
*/
function containsPattern($arr, $m, $k) {
$str = implode('', $arr);
$ans = false;
$n = strlen($str);
if($n < $m * $k) {
return $ans;
}
for($i = 0; $i < $n; $i++) {
$s = substr($str, $i, $m);
if(strlen($s) < $m) {
break;
}
$s1 = '';
for($j = 0; $j < $k; $j++) {
$s1 .= $s;
}
if(strpos($str, $s1) !== false) {
$ans = true;
break;
}
}
return $ans;
}
}