我被要求解决这个问题。请建议我如何解决这个问题。
$string = "kkjnmnmnjjjnmn";
这里我需要找到连续重复的长度为3的字符串。例如 - kkj只发生过一次,jnm发生了2次,nmn发生了3次。
从第一个字符开始,沿右侧方向开始,应输出3个连续重复多次的字符。
Preg_match_all will result as nmn - 2 times and not as 3 times.
如何解决这个问题?
答案 0 :(得分:3)
$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将包含您需要的内容
答案 1 :(得分:1)
这个没有使用任何内置函数,Trip>
$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);
答案 2 :(得分:0)
这是我的想法。
$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
}
答案 3 :(得分:0)
我不是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