string — есть ли способ повторить самый большой сегмент непрерывного сегмента повторения, используя php?

Я хочу поместить входные данные, например, «RKKRRRRK», и попытаться получить выходные данные, похожие на самый большой непрерывный сегмент. Предположим, мой ввод может быть «RKKKR», тогда моя программа отобразит «KKK» — самый большой непрерывный сегмент … и затем также отобразит счет 3 ..

Я уже написал код для подсчета значений ‘R’ .. теперь я хочу, чтобы эта программа также … нужна помощь, чтобы кто-нибудь помог мне .. спасибо заранее.

Вот код: —

<?php

function numberOfR($string1)
{

for($i=0;$i <strlen($string1);$i++)
{
if($string1[$i]!='K')
{
$count++;
}
}
return $count;
}
$return_value= numberOfR("RKKRK");
echo "R's count is:";
echo $return_value;
?>

1

Решение

    <?php
function getLongetSegment($string) {
$currentSegmentChar='';
$currentSegment="";
$biggestSegment="";
$current_length=0;
$biggest_length=0;
for($i=0;$i<strlen($string);$i++) {
$char = $string[$i];
if($char != $currentSegmentChar || $currentSegmentChar == '') {
if($current_length >= $biggest_length) {
$biggestSegment = $currentSegment;
$biggest_length = $current_length;
}
$currentSegmentChar = $char;
$currentSegment = $char;
$current_length = 1;
}
elseif($currentSegmentChar != '') {
$currentSegment .= $char;
$current_length++;
}
}
if($current_length >= $biggest_length) {
$biggestSegment = $currentSegment;
}
return array("string" => $biggestSegment,"length" => $biggest_length);
}
print_r(getLongetSegment("RKKRGGG"));
?>

Результат: GGG

0

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

Ты можешь использовать preg_match_all здесь, как

preg_match_all('/(.)\1+/i','RKKRRRRK',$res);
usort($res[0],function($a,$b){
return strlen($b) - strlen($a);
});
echo $res[0][0];
0

Не уверен, что я правильно понял. Что-то вроде этого:

function maxCharSequece($string1)
{
$maxSeq = $seq = 0;
$maxChar = $lastChar = null;

for( $i = 0; $i < strlen($string1); $i++ )
{
$c = $string1[$i];

if (!$lastChar) $lastChar = $c;

if ( $lastChar == $c ){
if ( ++$seq > $maxSeq ) $maxChar = $lastChar;
}
else {
$maxSeq = $seq;
$seq = 0;
}
}

return $maxChar;
}
0

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

$sq = '';
preg_replace_callback('/(.)\1+/',
function ($i) use (&$sq) {
if(strlen($i[0]) > strlen($sq)) $sq = $i[0];
},  $str);
echo  $sq . " " . strlen($sq);
0
По вопросам рекламы [email protected]