function findAnagrams($s, $t) {
$ret = [];
$needs = $windows = [];
$len_s = strlen($s);
$len_t = strlen($t);
$left = $right = 0;
for ($i = 0; $i < $len_t; $i++) {
$needs[$t[$i]]++;
}
$match = 0;
while ($right < $len_s) {
$r_str = $s[$right];
if (isset($needs[$r_str])) {
$windows[$r_str]++;
if ($windows[$r_str] == $needs[$r_str]) {
$match++;
}
}
$right++;
while ($match == count($needs)) {
if ($right - $left == $len_t) {
$ret[] = $left;
}
$l_str = $s[$left];
if (isset($needs[$l_str])) {
// if (--$windows[$l_str] != $needs[$l_str]) {
// $match--;
// }
if (--$windows[$l_str] < $needs[$l_str]) {
$match--;
}
}
$left++;
}
}
return $ret;
}
跟之前的滑动窗口一个模板,只不过是在试图改变窗口left时检测的条件不一样。另外这里的异位词竟然包括顺序也相同的词。。。。