找到字符串Javascript的所有组合

时间:2017-08-16 20:08:02

标签: javascript string

我想在javascript中找到字符串的所有组合。我查询了之前提出的问题,但有一个输出缺失,我不知道如何找到它。

我的代码是:

    <html>
    <head></head>
    <body>
    <label>Enter word/sentence to generate combinations:</label>
        <input type="text" name="comb"/></br>
        <input type="button" value="Get Combination" name="combbtn" onclick="substrings()"/>
        <script>
            function substrings(){
                var str=document.getElementsByTagName("input")[0].value;
                var i, j, result = [];
                  for (i = 0; i < str.length; i++) {
                      for (j = i + 1; j < str.length + 1; j++) {
                          result.push(str.slice(i, j));
                      }
                  }
                  alert(result);
            }
        </script>
    </body>
</html>

当我尝试“爸爸”作为输入时,预期输出为: -

  

d,一个,DA,d,DD,广告,爸

但是我的代码错过了

  

“DD”

我如何包含它。任何帮助/建议?

2 个答案:

答案 0 :(得分:0)

对于n个字符,您需要2 ^ n-1种可能性

所以让我们使用二进制文件:

对于n个字符,让变量从0到2 ^ n-1运行。 检查变量的二进制数字。它们将n

当数字为0时,省略该字符;当数字为1时,显示相应的字符。

显然你不想要空输出,这就是你没有在0开始你的循环变量的原因。

&#13;
&#13;
    let str="dad";
    let n=str.length;
    for (i=1;i<2**n-1;i++) {
      let out="";
      for (c=0;c<n;c++){
        if (i & (2**c) ) {
          out += str[c];
        }
      }
    console.log(out);
    }
&#13;
&#13;
&#13;

d 一个 DA d DD 广告

答案 1 :(得分:0)

您需要做的是打印所有子序列,此代码将执行此操作

&#13;
&#13;
function printSubsequences(str){
    let len = str.length, result = [];
    for(let i=1; i<(1<<len); i++){
        let temp = "";
        for(let j=0; j<len; j++){
            if((i&(1<<j))){
                temp = temp +str.charAt(j);
            }
        }
        result.push(temp);
    }
    console.log(result);
}
printSubsequences('dad');
&#13;
&#13;
&#13;

注意时间复杂度指数

考虑一个n位数字,循环

for(let i=1; i<(1<<len); i++)

涵盖从1到2 ^(n-1)的所有数字。由于所有可能的组合都可以用这个数字 i 表示,我们需要检查给定的i设置了哪些位

for(let j=0; j<len; j++)

遍历所有可能的位并检查是否设置了(i&amp; 2 ^(j-1)),如果已设置则该字符是当前字符串的一部分。这是以3位表示的字符串

  

&#34; d&#34; 001
    &#34;&#34; 010
    &#34; DA&#34; 011
    &#34; d&#34; 100
    &#34; DD&#34; 101
    &#34;广告&#34; 110
    &#34;爸&#34; 111