php中字符串的排列

时间:2011-11-15 01:25:18

标签: php optimization permutation

我的代码遇到问题,同时查找长度大于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');

1 个答案:

答案 0 :(得分:0)

似乎解决方案的核心应该在于不检查所有内容。例如,如果你给我“地震”这个词,那么应该立即明白,对于任何以“qk”开头的词都没有字典词,因此检查格式q k _ _ _ _ _ _ _ _ _的所有排列都是不必要的。这种类型的检查将为您节省大量的比较和查找操作。单独这个“qk”示例将排除你需要检查的362,880(9!)个排列。

因此,不是计算所有排列,而是如果匹配其中一个排列,则从字典中拉出来,我会确保你生成的每个排列实际上都是一个可能的单词。