编程语言
首页 > 编程语言> > 如何使用PHP获得所有可能的字符串排列?

如何使用PHP获得所有可能的字符串排列?

作者:互联网

有一个字符映射,如下所示:

$replacements = array(
    array('a', 'b'), // a => b
    array('a', 'c'), // a => c
    array('b', 'n'),
    array('c', 'x'),
);

并且有一个输入字符串,例如“ cbaa”.我如何获得所有组合,其中至少一个字符被替换为其替代之一?在此示例中,“ a”可以替换为“ b”和“ c”,因此字符串包括:

xbaa
cnaa
xbba
cbca
cbab
cbac
...
xnaa
xnac
...

解决方法:

这是代码Dmitry Tarasov的更改版本(请给他所有积分),似乎工作正常.

class Combine {
    private static $_result = array();

    public static function run($str, $replacements){
        self::_run($str, $replacements, 0);
        return array_values(array_unique(self::$_result));
    }

    private static function _run($str, $replacements, $start){
        self::$_result[] = $str;
        for($i = $start, $l = strlen($str); $i < $l; $i++){ 
            self::_run($str, $replacements, $i+1);    
            if(isset($replacements[$str[$i]])){
                foreach($replacements[$str[$i]] as $key => $val){
                    $str[$i] = $val;
                    // call recursion
                    self::_run($str, $replacements, $i+1);
                }
            }
        }
    }
}

print_r( Combine::run($str, $replacements) );

引入了private函数是为了避免那些繁重的数组操作被多次执行,而这些操作除了在root调用中没有在其他地方使用之外.

标签:combinatorics,php
来源: https://codeday.me/bug/20191102/1990812.html