的Permute字符串,直到它匹配一些输入?

我在网上查询了此结果,但结果不多,因为很难用几句话来形容.

基本上,我需要一个函数,例如puntil,它接受参数字符串.基本上,函数排列直到字符串等于参数为止.

例如,如果您运行puntil(‘ab’),则应在函数内部执行:

一种
b
C
d
Ë
F
G
H
一世
Ĵ
ķ


ñ
Ø
p
q
[R
s
Ť
ü
v
w
X
ÿ
ž
a
Ab!比赛

另一个例子,对于puntil(‘abcd’)

一种
b
C
d
Ë
F
G
H
一世
Ĵ
ķ


ñ
Ø
p
q
[R
s
Ť
ü
v
w
X
ÿ
ž
a
b
交流电
广告
e
f
g

i
j
ak

上午
一个
o
ap

AR


au
影音
w
斧头
y
z

…等等等等
直到匹配abcd.

基本上是无限排列直到匹配.

有任何想法吗?

解决方法:

这是fiddle

 var alphabet = ['a','b','c'];//,'d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];

 var output = "";
 var match = "cccc";  //<----------- match here

//This is your main function 
function permutate() {

    var d = 0;   // d for depth

    while (true) {

       //Your main alphabet iteration             
       for (var i=0; i<alphabet.length; i++){

          //First level 
          if (d === 0) {
             console.log(alphabet[i])
             output = alphabet[i];
          }    
          else
             iterator(alphabet[i], d);   //Call iterator for d > 0

          if (output === match)
             return;
          }


          d++;  //Increase the depth
       }
 }


 //This function runs n depths of iterations
 function iterator(s, depth){

    if (depth === 0)
       return;

    for (var i=0; i<alphabet.length; i++){

       if (depth > 1)
          iterator(s + alphabet[i], depth - 1)
       else {
          console.log(s + alphabet[i]);
          output = s + alphabet[i];
       } 

       if (output === match)
          return;
    }

 };                

说明:

您的程序需要遍历这样的字母树

[a] 
    -[a]
        -[a] 
             -[a]...
             -[b]...

         [b] ...
    -[b] -
         -[a]...
         -[b]...

[b] - ...
[c] - ...

如果不需要您首先完成每个深度的要求,则可以通过常规递归函数轻松完成此操作.

因此,我们需要一个特殊的迭代器(深度)函数,该函数可以执行请求的嵌套迭代次数(深度).

因此main函数可以调用深度增加的迭代器(d).

就这样!!

警告:这只是一个原型.这可以进行优化和改进.它使用全局变量来简化演示.您的真实程序应避免使用全局变量.如果匹配字太长,我还建议在setTimeout中调用iterator().
n个深度只能受您的资源限制.

上一篇:python-检查排列是否存在/组合是否唯一


下一篇:javascript-此递归数组置换函数如何在后台运行?