var n=0;
var counter=0;
var storarr=new Array();
function swap(a,b,str) { //swaps the terms str[a] and str[b] and returns the final str
str = str.split("");
var temp = str[a];
str[a] = str[b];
str[b] = temp;
return str.join("");
}
function anagram(_a,_b,ar) { //actual function which produces the anagrams
if(_a == _b) {
storarr[n]=ar;
n++;
counter++;
}
else {
for(var i= _a;i<= _b;i++) {
ar=swap(_a,i,ar);
anagram(_a+1,_b,ar);
ar=swap(_a,i,ar);
}
}
}
function factorial(a) { //return a!
var x=1;
for(var i=1;i<=a;i++)
x=x*i;
return x;
}
var strl=prompt("Enter String:","");
var l=strl.length;
anagram(0,l-1,strl);
storarr.sort(); //sorts the storarr alphabetically
var storlen=storarr.length;
var cai=0;
var counterarr = new Array();
strl.split("");
for(var i=0;i<l;i=i+c) { //determines the number of times a term is repeating
var c=1;
for(var j=i+1;j<l;j++) {
if(strl[i]==strl[j])
c++;
}
counterarr[cai]=c;
cai++;
}
var yellow=1;
for(var i=0;i<counterarr.length;i++) { //multiplies the terms of the counter array
yellow=yellow*factorial(counterarr[i]);
}
counter=counter/yellow;
document.write("Count : " + counter + "<br />");
for(var i=0;i<storlen;i=i+yellow) { //prints the non-flagged terms in storarr
document.write(storarr[i] + "<br />");
}
strl.join("");
8条答案
按热度按时间nkkqxpd91#
没有预构建,但是编写这样的函数是可能的。。以下是使用两个函数的一种相对简单的方法:
用法:
现场测试用例:http://jsfiddle.net/yahavbr/x79vz/1/
这只是一个基本的实现,它不会删除重复项,也没有优化。但是,对于小字符串,您不会有任何问题,可以像上面的测试用例中那样添加时间度量,看看您的合理限制是什么。
hec6srdp2#
置换(“”,'123')将返回
["123", "132", "213", "231", "312", "321"]
8e2ybdfx3#
排列(“the”);
//输出返回:['the','teh','het','hte','eth','eht']
acruukt94#
假设要搜索一个大字符串,可以使用正则表达式
要检查首先匹配字母和字母总数的一组可能性,
并返回与模式使用相同字母集的匹配项。
//(不区分大小写)
字母集(“the”).sort();
50pmv0ei5#
这是类似的,但从一个单词数组中查找所有的字谜/排列。我在一次采访中提出了这个问题。给定一个单词数组['cat','dog','tac','god','act',],返回一个数组,将所有字谜组合在一起。确保字谜是唯一的。
6qfn3psc6#
8iwquhpp7#
js中没有任何内置函数(我不相信它是用任何编码语言编写的)……不管怎么说,这是一个功能齐全的程序,它省略了任何重复,还显示了排列的数量。。。。。
nkhmeac68#