给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。
注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。
<?php
/**
* @param String $s
* @param String[] $words
* @return Integer[]
*/
function findSubstring($s, $words) {
if(!is_array($words) || ($count = count($words))<= 0){
return [];
}
$length_per = strlen($words[0]);
$length = $length_per * $count;
$length_str = strlen($s);
if($length_str < $length){
return [];
}
$map = [];
foreach ($words as $val){
if( isset($map[$val]) ){
$map[$val] += 1;
} else {
$map[$val] = 1;
}
}
$res = [];
$i = 0;
while ($i < $length_str + 1-$length){
$_map = $map;
echo $i,'<br />';
$str = substr($s, $i, $length);
$temp = [];
for($j=0; $j<$length; $j+=$length_per){
$temp[] = substr($str, $j, $length_per);
}
foreach ($temp as $value){
if(isset($_map[$value]) && $_map[$value]>0){
$_map[$value] -= 1;
} else {
break;
}
}
if(array_sum($_map) == 0){
$res[] = $i;
}
$i++;
}
return $res;
}
$s = 'wordgoodbestworewordgoodbestwore';
$words = ["word","good","best","wore"];
print_r( findSubstring($s, $words) );