<script type=text/javascript>
String.prototype.Pusharr = function() {
var K = {}, R = [];
var A = this.split(""), M = A.length;
while (R.length < M) {
var Q = M * Math.random() >> 0;
! K[Q] && R.push(A[Q]) && (K[Q] = !0);
}
try {return R.join("")} finally {R.length = 0}
}
String.prototype.Arrange = function() {
var I = J = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
while (I ++ < M) {
! K[A[I]] && (K[A[I]] = !0) || J ++;
}
var N = X + J;
while (R.length < N) {
var Q = this.Pusharr();
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R
}
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcde".Arrange());
</script>
String.prototype.Pusharr = function() {
var K = {}, R = [];
var A = this.split(""), M = A.length;
while (R.length < M) {
var Q = M * Math.random() >> 0;
! K[Q] && R.push(A[Q]) && (K[Q] = !0);
}
try {return R.join("")} finally {R.length = 0}
}
String.prototype.Arrange = function() {
var I = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
var N = X + M - O;
while (R.length < N) {
var Q = this.Pusharr();
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R
}
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcde".Arrange());
</script>
<script type=text/javascript>
String.prototype.Pusharr = function() {
var K = {}, R = [];
var A = this.split(""), M = A.length;
while (R.length < M) {
var Q = M * Math.random() >> 0;
! K[Q] && R.push(A[Q]) && (K[Q] = !0);
}
return R.join("")
}
String.prototype.Arrange = function() {
var I = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
var N = X + M - O;
while (R.length < N) {
var Q = this.Pusharr();
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R.join(",")
}
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbb".Arrange());
alert("abcd".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcde".Arrange());
</script>
String.prototype.Pusharr = function() {
var K = {}, R = [];
var A = this.split(""), M = A.length;
while (R.length < M) {
var Q = M * Math.random() >> 0;
! K[Q] && R.push(A[Q]) && (K[Q] = !0);
}
return R.join("")
}
String.prototype.Arrange = function() {
var I = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
var N = O > 1 ? X + M - O : 1;
while (R.length < N) {
var Q = this.Pusharr();
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R.join(",")
}
alert("aaa".Arrange());
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbb".Arrange());
alert("abcd".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcde".Arrange());
</script>
"未结束的字符串常量"
哦,可能编码问题,中间有特殊字符“‖”,我贴的是UTF-8。再简化并改编码为编码为ANSI贴如下。效率怎么提高呢?下面还只到7个不同字母组成的单词全排5040种组合,就较慢了。
<script type=text/javascript>String.prototype.Arrange = function() {
var Q = I = 0, K = {}, R = [], A = this.split(""), M = A.length;
var O = A.join("‖").match(/(\b[^‖]+\b)(?!.*‖\1\b)/gi).length;
var X = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(O);
var N = O > 1 ? X + M - O : 1;
while (R.length < N) {
Q = A.sort(function(){return Math.random() > .5 ? 1 : -1}).join("");
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R.join("\n")
}alert("a".Arrange());
alert("aaa".Arrange());
alert("abb".Arrange());
alert("abc".Arrange());
alert("abbb".Arrange());
alert("abcd".Arrange());
alert("abbbb".Arrange());
alert("abbde".Arrange());
alert("abcdefg".Arrange());</script>