【问题标题】:how to search for consecutive repeated characters in a string without using any built-in php functions?如何在不使用任何内置 php 函数的情况下搜索字符串中的连续重复字符?
【发布时间】:2014-03-25 06:40:38
【问题描述】:

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

$string = "kkjnmnmnjjjnmn";

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

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

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

如何解决?

【问题讨论】:

  • 但是nmn不是连续重复的
  • 那么为什么jnm 没有输出?
  • 我只是举了一个例子——所以只显示了 nmn
  • 那么kkjnmnmnjjjnmn 输入的完整预期输出是什么?
  • 你也没有写:without using any built-in php functions?

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


【解决方案1】:
    $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 将包含您需要的内容

【讨论】:

  • $pieces = [];必须是 $pieces[];
  • 不,它没有。 $pieces = [] 就像 $pieces = array()
  • 我尝试使用 $pieces=[];但它给出了错误PHP Parse error: syntax error, unexpected '[' in /var/www/test/test.php on line 4
  • 表示你的PHP版本低于5.4
【解决方案2】:

这个没有使用任何内置函数,试试

$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);

【讨论】:

  • 完美...但是使用 foreach 似乎比每次都检查 $string[$i+2] 更好...
  • 你将如何在这里使用foreach? isset($string[$i+2]) 只是检查索引,所以不会花太多时间处理
【解决方案3】:

这是我的想法。

$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
}

【讨论】:

  • 难道 $i 不能等于 $strlen($string) - 2?
【解决方案4】:

好吧,我不是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多