Php 如何获取字符串中具有相同字符的最长序列的长度?

Php 如何获取字符串中具有相同字符的最长序列的长度?,php,string,count,Php,String,Count,具体说明: function getLength($str) { //function i need } $str1 = 'aabbcccc'; $str2 = 'aabbccccaaaaa'; echo getLength($str1); //will get 4 echo getLength($str2); //will get 5 有什么好主意吗?通过一次遍历一个字符的字符串,跟踪最后一个字符的命中率和命中次数,您可以很容易地得到这个结果。同时存储数量最多的那些;当你点击一个不同

具体说明:

function getLength($str)
{
   //function i need
}
$str1 = 'aabbcccc'; 
$str2 = 'aabbccccaaaaa';
echo getLength($str1); //will get 4
echo getLength($str2); //will get 5

有什么好主意吗?

通过一次遍历一个字符的字符串,跟踪最后一个字符的命中率和命中次数,您可以很容易地得到这个结果。同时存储数量最多的那些;当你点击一个不同的字符时,检查你是否点击了一个新的最大连续字符数,如果是的话,将其存储为你的新最大连续字符数。在遍历整个字符串时返回最大值。

一次遍历字符串一个字符,跟踪最后一个字符以及命中的次数,就可以很容易地得到最大值。同时存储数量最多的那些;当你点击一个不同的字符时,检查你是否点击了一个新的最大连续字符数,如果是的话,将其存储为你的新最大连续字符数。在遍历整个字符串后返回最大值。

以下是我对它的看法,它的执行速度应该比提供的正则表达式和substr解决方案快一些:

function getLongestSequence($str)
{
   $sl = strlen($str);
   $longest = 0;
   for($i = 0; $i < $sl; )
   {
       $substr = substr($str, $i);
       $len = strspn($substr, $substr{0});
       if($len > $longest)
           $longest = $len;
       $i += $len;
   }

   return $longest;
}
function getLength($str)
{
  if (''===$str) return 0;
  preg_match_all('!(.)\\1*!', $str, $m);
  return max(array_map('strlen', $m[0]));
}
function getLongestSequenceLength($string)
{
    $longest = $i = 0;
    $totalLength = strlen($string);
    while($i < $totalLength) {
        if(($length = strspn($string,  $string[$i], $i)) > $longest) {
            $longest = $length;
        }
        $i += $length;
    }
    return $longest;
}
迭代的结果将是

7 => eeeeeee
6 => dddddd
6 => ffffff
5 => ccccc
5 => ggggg
4 => hhhh
4 => bbbb
3 => iii
3 => aaa
2 => jj
1 => k

以下是我对它的看法,它的执行速度应该比Regex和substr解决方案快一些:

function getLongestSequenceLength($string)
{
    $longest = $i = 0;
    $totalLength = strlen($string);
    while($i < $totalLength) {
        if(($length = strspn($string,  $string[$i], $i)) > $longest) {
            $longest = $length;
        }
        $i += $length;
    }
    return $longest;
}
迭代的结果将是

7 => eeeeeee
6 => dddddd
6 => ffffff
5 => ccccc
5 => ggggg
4 => hhhh
4 => bbbb
3 => iii
3 => aaa
2 => jj
1 => k

正确的拼写是长度。@KennyTM,哦,对了,谢谢你的更正:正确的拼写是长度。@KennyTM,哦,对了,谢谢你的更正:……但是我现在看到我的错误了。你的解决方案比我的更干净。。。我忘了strspn。干得好+1将$i++从循环中删除,只需在循环中添加$i+=$len,即可节省一点时间。然后你将有更少的迭代…但我现在看到了我的错误。你的解决方案比我的更干净。。。我忘了strspn。干得好+1将$i++从循环中删除,只需在循环中添加$i+=$len,即可节省一点时间。这样你的迭代次数就少了。聪明!我投了你一票,但我想如果你解释得再好一点,聪明一点,我和其他人都会感激的。聪明!我比你投的票高,但我想如果你解释得更好一点,聪明一点,我和其他人都会感激的。我已经找了很多年了,谢谢分享!我已经找了很多年了,谢谢分享!