如何使用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