我需要一个PHP代码来查找字符串中最长的连续字符序列

我需要一个PHP代码来查找字符串中最长的连续字符序列,php,algorithm,Php,Algorithm,我需要一个PHP代码来查找字符串中最长的连续字符序列。因此,如果b组合在一起的次数最多,则程序应回显b和计数 示例字符串: aaabababbbbbaaaaabbbbbbbbaa 输出必须是: b 8 $string='aaabababbbaaabbbbbbbaa'; $occurrence=[]; $count=strlen($string); 对于($x=0;$x0) { $mostFrequentChar=$curChar=$string[0]; $maxFreq=$curFreq=1

我需要一个PHP代码来查找字符串中最长的连续字符序列。因此,如果
b
组合在一起的次数最多,则程序应
回显b
计数

示例字符串:

aaabababbbbbaaaaabbbbbbbbaa
输出必须是:

b 8
$string='aaabababbbaaabbbbbbbaa';
$occurrence=[];
$count=strlen($string);
对于($x=0;$x<$count;$x++){
如果(isset($ocurrence[$string[$x]])){
$ocurrence[$string[$x]]++;
}否则{
$ocurrence[$string[$x]]=0;
}
}
var_转储(发生次数);

这应该能奏效

因为您正在寻找连续的序列:

$string = 'aaabababbbbbaaaaabbbbbbbbaa';

$count = strlen($string);
if ($count > 0)
{

    $mostFrequentChar = $curChar = $string[0];
    $maxFreq = $curFreq = 1;
    for ($i = 1; $i < $count; $i++)
    {
        if ($string[$i] == $curChar)
        {
            $curFreq++;
            if ($curFreq > $maxFreq)
            {
                $mostFrequentChar = $curChar;
                $maxFreq = $curFreq;
            }
        }
        else
        {
            $curChar = $string[$i];
            $curFreq = 1;
        }
    }

}

echo $mostFrequentChar . ' ' . $maxFreq;
$string='aaabababbbaaabbbbbbbaa';
$count=strlen($string);
如果($count>0)
{
$mostFrequentChar=$curChar=$string[0];
$maxFreq=$curFreq=1;
对于($i=1;$i<$count;$i++)
{
if($string[$i]==$curChar)
{
$curFreq++;
如果($curFreq>$maxFreq)
{
$mostFrequentChar=$curChar;
$maxFreq=$curFreq;
}
}
其他的
{
$curChar=$string[$i];
$curFreq=1;
}
}
}
echo$mostFrequentChar。“”$maxFreq;
使用
-
preg\u match\u all
获取重复字符序列,
-
array\u map
以及
strlen
以获取每个序列的字符串长度
-
max
以获取数组中的最大值

考虑以下示例:

$string =  "aaabababbbbbaaaaabbbbbbbbaa";

preg_match_all('#(\w)\1+#',$string,$matches);

print_r($matches);
将输出

Array
(
    [0] => Array
        (
            [0] => aaa
            [1] => bbbbb
            [2] => aaaaa
            [3] => bbbbbbbb
            [4] => aa
        )

    [1] => Array
        (
            [0] => a
            [1] => b
            [2] => a
            [3] => b
            [4] => a
        )

)
Array
(
    [0] => 3
    [1] => 5
    [2] => 5
    [3] => 8
    [4] => 2
)
b
接下来,我们得到每个重复字符字符串的大小

$sizes = array_map('strlen', $matches[0]);
print_r($sizes);
将输出

Array
(
    [0] => Array
        (
            [0] => aaa
            [1] => bbbbb
            [2] => aaaaa
            [3] => bbbbbbbb
            [4] => aa
        )

    [1] => Array
        (
            [0] => a
            [1] => b
            [2] => a
            [3] => b
            [4] => a
        )

)
Array
(
    [0] => 3
    [1] => 5
    [2] => 5
    [3] => 8
    [4] => 2
)
b
现在让我们获取
$size
数组的最大值

print max($sizes);
会给我们

8
我们需要最大值的键来提取字母

$maxKey = array_keys($sizes, max($sizes));

print $matches[1][$maxKey[0]];
将输出

Array
(
    [0] => Array
        (
            [0] => aaa
            [1] => bbbbb
            [2] => aaaaa
            [3] => bbbbbbbb
            [4] => aa
        )

    [1] => Array
        (
            [0] => a
            [1] => b
            [2] => a
            [3] => b
            [4] => a
        )

)
Array
(
    [0] => 3
    [1] => 5
    [2] => 5
    [3] => 8
    [4] => 2
)
b


我可以使用不同的字符串来执行此操作,其中包含“,”。通过使用爆炸函数。但我的实际问题是,它在
aaabababbbbbaaabbbbbaaaaaaaa
中应该如何运行b'和a'重复8次。或者,如果您只想b
asort
生成的数组并获取最后一个元素。这不就是在字符串中生成最频繁的字符,而不考虑连续性吗?为什么要增加字符而不是出现计数器?虽然这个代码片段可以解决这个问题,但确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!这并不能回答所问的问题。虽然此代码片段可以解决问题,但确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!欢迎来到堆栈溢出!虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!代码也可以进行一些清理,例如修复缩进和删除额外的空行。