繁体   English   中英

PHP中字符串的排列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM