嗨,我有这个算法的问题。

<?php
function get_all_substrings($input){
$subs = array();
$length = strlen($input);
for($i=0; $i<$length; $i++){
    for($j=$i; $j<$length; $j++){
        $subs[] = substr($input, $i, ($j - $i) + 1);
    }
}
return $subs;
}

$subs = get_all_substrings("kikilala");
print_r($subs);

?>

它应该返回30个独特的结果如下
 'a', 'al', 'ala', 'i', 'ik', 'iki', 'ikil', 'ikila', 'ikilal', 'ikilala', 'il', 'ila', 'ilal', 'ilala', 'k', 'ki', 'kik', 'kiki', 'kikil', 'kikila', 'kikilal', 'kikilala', 'kil', 'kila', 'kilal', 'kilala', 'l', 'la', 'lal', 'lala'

但是我得到了
Array ( [0] => k [1] => ki [2] => kik [3] => kiki [4] => kikil [5] => kikila [6] => kikilal [7] => kikilala [8] => i [9] => ik [10] => iki [11] => ikil [12] => ikila [13] => ikilal [14] => ikilala [15] => k [16] => ki [17] => kil [18] => kila [19] => kilal [20] => kilala [21] => i [22] => il [23] => ila [24] => ilal [25] => ilala [26] => l [27] => la [28] => lal [29] => lala [30] => a [31] => al [32] => ala [33] => l [34] => la [35] => a )

我哪里错了?谢谢

最佳答案

那是因为有些子串是重复的。例如kialla等。要解决这个问题,只需运行array_unique

$subs = array_unique(get_all_substrings("kikilala"));

注意:数组唯一不会重置索引因此,通过观察最后一个索引技巧来计算数组长度在这里行不通。要重置索引,请使用array_values
$subs = array_values(array_unique(get_all_substrings("kikilala")));

如果你想整理一下
$subs = array_unique(get_all_substrings("kikilala"));
sort($subs);

关于php - PHP获得独特的独特输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18951908/

10-11 15:21