我需要构建一个函数 - 我不知道这是否已经存在于PHP中 - 为给定单词创建尽可能多的唯一字母排列。我们来看这个例子:
parent/foo/src/main/java/com/foo/service/
foo/src/main/java/com/foo/service/
我怎么能做到这一点?能为我提供一个算法来实现这个目标吗?
注意:请记住,单词可以是英语或西班牙语!
答案 0 :(得分:3)
如下的潜在方法(伪代码):
counter
积分为2的字符串长度。 (例如:'你好'是5个字符而counter
是32)。counter-1
,在字符串长度中生成此整数的二进制表示。 (IE /单词'hello'是从'00000'循环到'11111'。代码:
function permutationWords($input) {
$input = strtolower($input);
$results = [];
$length = strlen($input);
$counter = pow(2, $length);
for($i=0; $i<$counter; $i++) {
$binaryStr = str_pad(decbin($i), $length, '0', STR_PAD_LEFT);
$variant = '';
for($j=0; $j<$length; $j++) {
$variant .= ($binaryStr[$j] == '1') ? strtoupper($input[$j]) : $input[$j];
}
$results[] = $variant;
}
return $results;
}
绝对有优化空间或更有效的方法。