2015-09-04 60 views
1

我想輸入像「RKKRRRRK」,並嘗試得到像最大的連續段輸出。假設我的輸入可能是「RKKKR」,那麼我的程序將顯示'KKK'是最大的連續段..然後它也顯示計數爲3 ..有沒有辦法重複使用php的重複連續段的最大段?

我已經寫的代碼,用於計算「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

你想要的任何*最大的連續段*字母還是K字母? – splash58

回答

0
<?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

非常感謝各位 –

+0

不客氣。 (_FYI如果任何這些答案可以幫助你,你可以接受任何這些答案或uovote一個答案,這真的可以幫助你._) –

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

好一個......起初我會寫那個 –