我试图找到给定字符串的所有可能的 2 个字母组合。有没有比按位置应用子字符串然后再次调用该函数更快的方法?
以下是我正在尝试的:
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 $permutations;
}
$str = "tone";
$permutations = array_unique(permute($str));
$str1 = substr_replace($str, "", 1,2);
$permutations = array_unique(permute($str1));
鉴于上面的字符串“tone”,我想得到答案:
to
tn
te
on
oe
ne
ot
nt
et
no
eo
en
如果你想使用 substr
function str2array($string) {
$strArray = [];
for ($i = 0; $i < strlen($string); $i++) {
$strArray[] = substr($string, $i, 1);
}
return $strArray;
}
But use str_split
反而。
$string = 'tone';
$strArray = str_split($string);
foreach ($strArray as $key => $char1) {
$strArray2 = $strArray;
unset($strArray2[$key]);
foreach ($strArray2 as $char2) {
$permutations[] = $char1 . $char2;
}
}
//EDIT: adding array_unique in case of dupes
$uniquePermutations=array_unique($permutations);
print_r($uniquePermutations);
大批
(
[0] => 到
[1] => TN
[2] => 特
[3] => 奥特
[4] => 上
[5] => 或
[6] => 到
[7] => 没有
[8] => 不
[9] => 等
[10] => zh
[11] => zh
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)