Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php获得唯一的不同输出_Php_Algorithm - Fatal编程技术网

Php获得唯一的不同输出

Php获得唯一的不同输出,php,algorithm,Php,Algorithm,嗨,我这里有这个算法的问题 <?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

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

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

?>
但是我越来越

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 )

我哪里错了?谢谢

如果您想要唯一,那么您需要检查subs数组是否已经包含您要添加的条目


例如,它将添加几个“k”、“i”、“l”和“a”字符。因此,在添加新条目时,您需要搜索subs数组,并仅在它不存在时添加它。

,因为有些令牌是重复的。试试你的$subs:

$subs = array_unique($subs);

只需将这些行添加到代码中

sort($subs);
$subs = array_unique($subs);

请在

查看所需的输出,这是因为某些子字符串是重复的。例如
ki
al
la
等。要解决此问题,只需运行
array\u unique

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

$subs = array_values(array_unique(get_all_substrings("kikilala")));
如果你想分类的话

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

1-字符串长度减少1(最后一个位置)

2-第一个循环每次递减1

尝试:


循环有多个问题,如果我假设第一个/外循环用于单词长度,第二个/内循环用于单词位置,那么下面是错误

  • 为什么从$i=0开始,它应该是1是无用的

  • 如果您希望子字符串中包含完整单词,则外部/长度循环必须包含完整长度,即$iYou应回答为什么,而不是修复。为什么使用此修复可以轻松理解。-1这是如何解决问题的?您尝试过了吗?在您拥有完整的子字符串列表之后,您可以自由地对数组中的重复项进行排序或筛选。
    $subs = array_unique(get_all_substrings("kikilala"));
    sort($subs);
    
    <?php
    function get_all_substrings($input){
        $subs = array();
        $length = strlen($input)-1; //change this line
        for($i=$length; $i>=0; $i--){ //and change this line
            for($j=$i; $j<$length; $j++){
                $subs[] = substr($input, $i, ($j - $i) + 1);    
            }   
        }   
        return $subs;
    }
    
    $subs = get_all_substrings("kikilala");
    print_r($subs);
    
    ?>
    
        function get_all_substrings($input) {
          $subs = array();
          $length = strlen($input);
          for ($i=1; $i<=$length; $i++) {
            for ($j=0; $j<$length; $j++) {
              if ($length >= ($i + $j)) {
                $subs[] = substr($input, $j, $i);
              }
            }   
          }   
          return $subs;
        }
    
        $subs = get_all_substrings("kikilala");
        print_r($subs);