sequence — подсчет последовательных вхождений определенных одинаковых символов в строке

Я пытаюсь подсчитать несколько «полос», в частности наибольшее количество побед и поражений подряд, а также большинство случаев игр без побед, игр без потерь.

У меня есть строка, которая выглядит следующим образом; ‘WWWDDWWWLLWLLLL’

Для этого мне нужно иметь возможность вернуть:

  • Самый длинный последовательный прогон W charector (затем я повторю для L)
  • Самый длинный последовательный прогон без W-характера (потом я скопирую для L)

Я нашел и адаптировал следующее, которое пройдет через мой массив и скажет мне самую длинную последовательность, но я не могу адаптировать его для соответствия критериям, указанным выше.

Вся помощь и обучение высоко ценится 🙂

    function getLongestSequence($sequence){
$sl = strlen($sequence);
$longest = 0;
for($i = 0; $i < $sl; )
{
$substr = substr($sequence, $i);
$len = strspn($substr, $substr{0});if($len > $longest)
$longest = $len;
$i += $len;
}
return $longest;
}
echo getLongestSequence($sequence);

0

Решение

Вы можете использовать регулярное выражение для обнаружения последовательностей идентичных символов:

$string = 'WWWDDWWWLLWLLLL';
// The regex matches any character -> . in a capture group ()
// plus as much identical characters as possible following it -> \1+
$pattern = '/(.)\1+/';

preg_match_all($pattern, $string, $m);
// sort by their length
usort($m[0], function($a, $b) {
return (strlen($a) < strlen($b)) ? 1 : -1;
});

echo "Longest sequence: " . $m[0][0] . PHP_EOL;
3

Другие решения

Вы можете достичь максимального количества последовательных символов в определенной строке, используя приведенный ниже код.

       $string = "WWWDDWWWLLWLLLL";
function getLongestSequence($str,$c) {
$len = strlen($str);
$maximum=0;
$count=0;
for($i=0;$i<$len;$i++){
if(substr($str,$i,1)==$c){
$count++;
if($count>$maximum) $maximum=$count;
}else $count=0;
}
return $maximum;
}
$match="W";//change to L for lost count D for draw count
echo getLongestSequence($string,$match);
0

По вопросам рекламы [email protected]