如何在不使用任何内置php函数的情况下搜索字符串中连续重复的字符?

时间:2014-03-25 06:40:38

标签: php regex string pattern-matching string-matching

我被要求解决这个问题。请建议我如何解决这个问题。

$string = "kkjnmnmnjjjnmn";

这里我需要找到连续重复的长度为3的字符串。例如 - kkj只发生过一次,jnm发生了2次,nmn发生了3次。

从第一个字符开始,沿右侧方向开始,应输出3个连续重复多次的字符。

Preg_match_all will result as nmn - 2 times and not as 3 times.

如何解决这个问题?

4 个答案:

答案 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