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,即可节省一点时间。这样你的迭代次数就少了。聪明!我投了你一票,但我想如果你解释得再好一点,聪明一点,我和其他人都会感激的。聪明!我比你投的票高,但我想如果你解释得更好一点,聪明一点,我和其他人都会感激的。我已经找了很多年了,谢谢分享!我已经找了很多年了,谢谢分享!