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 尝试:
循环有多个问题,如果我假设第一个/外循环用于单词长度,第二个/内循环用于单词位置,那么下面是错误
$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);