[英]Permutation for string in php
在查找长度大于7的字符串的字符串置换时,我的代码有问题。例如,“ abcdefgh”。 我必须找到长度不超过12个字的排列。 请查看我的代码,并建议是否可以进行任何优化。
function permute($str)
{
if (strlen($str) < 2)
{
return array($str);
}
$permutations = array();
$tail = substr($str, 1);
foreach (permute($tail) as $permutation)
{
$length = strlen($permutation);
for ($i = 0; $i <= $length; $i++)
{
$permutations[] = substr($permutation, 0, $i) . $str[0] . substr($permutation, $i);
}
}
/* Return the result */
return $permutations;
}
$arr = permute('abcdefghijkl');
解决方案的核心似乎在于不检查所有内容 。 例如,如果您给我一个单词“ earthquakes”,那么应该立即发现没有字典单词以“ qk”开头的任何单词,因此检查形式为qk _ _ _ _ _ _ _ _ _
所有排列不必要。 这种检查将为您节省很多比较和查找操作。 仅此“ qk”示例将排除您需要检查的362,880(9!)排列。
因此,我将确保您生成的每个排列实际上首先是一个可能的单词,而不是计算所有排列,然后从字典中检索是否与排列之一匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.