【问题标题】:Is there anyway to repeat the biggest segment of continuous segment of repeat using php?反正有没有重复使用php重复的连续片段的最大片段?
【发布时间】:2015-11-30 15:31:12
【问题描述】:

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

【问题讨论】:

  • 你想要任何字母或 K 字母的最大连续片段吗?

标签: php string for-loop longest-substring


【解决方案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

【讨论】:

    【解决方案2】:

    你可以在这里使用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];
    

    【讨论】:

    • 不客气。 (仅供参考,如果这些答案中的任何一个对您有帮助,您可以接受这些答案中的任何一个,或者投票选出一个真正对您有帮助的答案。
    【解决方案3】:

    不确定我是否完全正确地理解了这一点。像这样的:

    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;
    }
    

    【讨论】:

      【解决方案4】:

      可以使用 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);
      

      【讨论】:

      • 好一个...首先我要写那个
      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多