我是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"]
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' ]
没有预先构建,但编写这样的函数是可能的..这是一种使用两个函数的相对简单的方法:
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/
这只是基本实现,它不会删除重复项,也没有优化。但是,对于小字符串,您不会有任何问题,请像上面的测试用例一样添加时间测量,然后看看您的合理限制是多少。
| 归档时间: |
|
| 查看次数: |
8862 次 |
| 最近记录: |