Найти длину самой длинной последовательной последовательности выбранного символа в строке (PHP)?

Как найти длину самой длинной последовательной последовательности выбранного символа в строке?

То, что я пытаюсь сделать, это посмотреть, если 0 встречается пять или более раз в такой строке

«111010110101010000010010100000000000111»

Мне нужна функция, которая будет принимать строку и символ и в приведенном выше примере вернуть 11 для символа 0

Заранее большое спасибо, гуру 🙂

2

Решение

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

function howmanytimes($str,$char){
$maxcount=0;
$thiscount=0;
for($i=0;$i<strlen($str);$i++){
if(substr($str,$i,1)==$char){
$thiscount++;
if($thiscount>$maxcount) $maxcount=$thiscount;
}else $thiscount=0;
}
return $maxcount;
}

Надеюсь, это поможет!

Изменить: Если вы хотите, чтобы он только проверял, появляется ли символ более X раз подряд, есть более эффективный способ добиться этого. Эта функция вернет true, если выбранный символ появляется более X раз, и false, если нет.

function Xtimes($str,$char,$howmanytimes){
$maxcount=0;
$thiscount=0;
for($i=0;$i<strlen($str);$i++){if(substr($str,$i,1)==$char){
$thiscount++;
if($thiscount>$maxcount){
if($thiscount==$howmanytimes+1){return true;}
$maxcount=$thiscount;
}
}else $thiscount=0;
}
return false;
}
1

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

Здесь вы идете с regex:

function highCount($string, $select) {
preg_match_all("/($select+)\1*/", $string, $find);
foreach($find[0] as $single) {
$length[] = strlen($single);
}
return max($length);
}

//11
echo highCount("111010110101010000010010100000000000111", 0);

демонстрация.

1

Вы можете попробовать это:

 function myFunc($input_string,$find)
{
$string=preg_replace("^$find","-",$input_tring);
$array=explode("-",$string);
$array=array_diff($array, array(""));
asort($array);
return strlen($array[0]);
}

Я предположил, что - персонаж не появляется в ваших критериях поиска.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector