我被要求解决这个问题。请告诉我如何解决这个问题。
$string = "kkjnmnmnjjjnmn";
这里我需要找到长度为3的连续重复字符串。例如,KKJ只出现了一次,JNM出现了2次,NMN出现了3次。
从第一个字符开始,向右方向,连续输出3个重复不止一次的字符。
Preg_match_all will result as nmn - 2 times and not as 3 times.
如何解决这个问题?
$string = "kkjnmnmnjjjnmn";
$length = strlen($string);
$pieces = [];
for ($i = 0; $i < $length - 2; $i++) {
$piece = substr($string, $i, 3);
if (array_key_exists($piece, $pieces)) {
$pieces[$piece] += 1;
} else {
$pieces[$piece] = 1;
}
}
//$pieces将包含您需要的内容
这个没有使用任何内置函数,试试
$string = "kkjnmnmnjjjnmn";
$i = 0;
$strarr = array();
while(isset($string[$i+2])){
if(!isset($strarr[$string[$i].$string[$i+1].$string[$i+2]]))
$strarr[$string[$i].$string[$i+1].$string[$i+2]] = 1;
else
$strarr[$string[$i].$string[$i+1].$string[$i+2]] += 1;
$i++;
}
print_r($strarr);
我是这么想的
$arr = array();
for ($i = 0; $i <= strlen($string) - 3; $i++) {
$part = substr($string, $i, 3);
if (array_key_exists($part, $arr)) {
$arr[$part]++;
} else {
$arr[$part] = 1;
}
}
foreach ($arr as $key => $value) {
//output the result
}
我不是PHP专家,但在检查了前面的答案后,我发现了一个新的解决方案,这里是:
$string='aaaabcdeeeffaaabh';
$arr_str=array();
for($i=0;$i<strlen($string);$i++)
{
if(in_array($string[$i],$arr_str[$char[$i]]))
{
$arr_str[$string[$i]]=1;
}
else
{
$arr_str[$string[$i]]+=1;
}
}
foreach($arr_str as $key => $value)
{
echo $key.' Repeats '.$value.' Times'.'<br/>';
}
输出:a Repeats 7 Times
b Repeats 2 Times
c Repeats 1 Times
d Repeats 1 Times
e Repeats 3 Times
f Repeats 2 Times
h Repeats 1 Times