交换字符串中的每对字符

Chr*_*ris 5 php string

我想获得字符串交换字符对的所有排列。例如:

基本字符串:abcd

组合:

  1. bacd
  2. acbd
  3. abdc

ETC。

编辑

我只想交换彼此相邻的字母。就像第一与第二,第二与第三,但第三与第六不同。

最好的方法是什么?

编辑

只是为了好玩:有三到四个解决方案,有人可以发布这些解决方案的速度测试,以便我们可以比较哪个是最快的?

速度测试

我对 nickf 的代码和我的代码进行了速度测试,结果是我的代码在 4 个字母处击败了 nickf(10K 次为 0.08 和 0.06),但 nickf 的代码在 10 个字母处击败了它(nick 的 0.24 和我的 0.37)

nic*_*ckf 3

编辑:Markdown 今天讨厌我......

$input = "abcd";
$len = strlen($input);
$output = array();

for ($i = 0; $i < $len - 1; ++$i) {
    $output[] = substr($input, 0, $i)
              . substr($input, $i + 1, 1)
              . substr($input, $i, 1)
              . substr($input, $i + 2);
}
print_r($output);
Run Code Online (Sandbox Code Playgroud)