是否有任何预先构建的方法可以在JavaScript中查找给定字符串的所有排列?

Ant*_*t's 15 javascript

我是JavaScript世界的新手.正如标题所提到的,我想知道JavaScript中是否有任何预先构建的方法来查找给定字符串的所有可能的排列.

例如,给定输入:

the
Run Code Online (Sandbox Code Playgroud)

期望的输出:

the
teh
eht
eth
het
hte
Run Code Online (Sandbox Code Playgroud)

Hen*_*Liu 17

//string permutation

function permutation(start, string) {

    //base case
    if ( string.length == 1 ) {
        return [ start + string ];
    } else {

        var returnResult = [];
        for (var i=0; i < string.length; i++) {
            var result = permutation (string[i], string.substr(0, i) + string.substr(i+1));
            for (var j=0; j<result.length; j++) {
                returnResult.push(start + result[j]);
            }
        }

        return returnResult;
    }
}
Run Code Online (Sandbox Code Playgroud)

置换('','123')将返回

["123","132","213","231","312","321"]

  • 如果交换参数并添加了`start = start ||,它会更有用 ""用于防止空第二个参数的行.这样你就可以用`permutation('123')来调用它. (3认同)
  • 这个答案比公认的更好。 (2认同)

Kra*_*uri 5

function permutations(str){
  if (str.length === 1) {
      return str;
 }
  var permut = [];
  for (var i=0; i<str.length; i++){
      var s = str[0];
      var _new =  permutations(str.slice(1, str.length));
      for(var j=0; j<_new.length; j++) {
          permut.push(s + _new[j]);
      }
      str = str.substr(1, str.length -1) + s;
  }
  return permut;
}
Run Code Online (Sandbox Code Playgroud)

排列('the');
//输出返回:[ 'the', 'teh', 'het', 'hte', 'eth', 'eht' ]


Sha*_*ard 2

没有预先构建,但编写这样的函数是可能的..这是一种使用两个函数的相对简单的方法:

function FindAllPermutations(str, index, buffer) {
    if (typeof str == "string")
        str = str.split("");
    if (typeof index == "undefined")
        index = 0;
    if (typeof buffer == "undefined")
        buffer = [];
    if (index >= str.length)
        return buffer;
    for (var i = index; i < str.length; i++)
        buffer.push(ToggleLetters(str, index, i));
    return FindAllPermutations(str, index + 1, buffer);
}

function ToggleLetters(str, index1, index2) {
    if (index1 != index2) {
        var temp = str[index1];
        str[index1] = str[index2];
        str[index2] = temp;
    }
    return str.join("");
}
Run Code Online (Sandbox Code Playgroud)

用法:

var arrAllPermutations = FindAllPermutations("the");
Run Code Online (Sandbox Code Playgroud)

现场测试用例:http://jsfiddle.net/yahavbr/X79vz/1/

这只是基本实现,它不会删除重复项,也没有优化。但是,对于小字符串,您不会有任何问题,请像上面的测试用例一样添加时间测量,然后看看您的合理限制是多少。

  • -1 那必须被打破。“Hello World”有无数个输出。应该有11个!结果。例如,字符串“hello wordl”丢失。 (5认同)