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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值