我的代码遇到问题,同时查找长度大于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');
答案 0 :(得分:0)
似乎解决方案的核心应该在于不检查所有内容。例如,如果你给我“地震”这个词,那么应该立即明白,对于任何以“qk”开头的词都没有字典词,因此检查格式q k _ _ _ _ _ _ _ _ _
的所有排列都是不必要的。这种类型的检查将为您节省大量的比较和查找操作。单独这个“qk”示例将排除你需要检查的362,880(9!)个排列。
因此,不是计算所有排列,而是如果匹配其中一个排列,则从字典中拉出来,我会确保你生成的每个排列实际上都是一个可能的单词。