无论如何使用php重复连续重复段的最大部分?

时间:2015-09-04 12:55:18

标签: php string for-loop longest-substring

我想把输入像“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;
?>

4 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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;
}

答案 2 :(得分: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);

答案 3 :(得分: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