我想在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”
我如何包含它。任何帮助/建议?
答案 0 :(得分:0)
所以让我们使用二进制文件:
对于n个字符,让变量从0到2 ^ n-1运行。
检查变量的二进制数字。它们将n
。
当数字为0时,省略该字符;当数字为1时,显示相应的字符。
显然你不想要空输出,这就是你没有在0开始你的循环变量的原因。
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;
d 一个 DA d DD 广告
答案 1 :(得分:0)
您需要做的是打印所有子序列,此代码将执行此操作
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;
注意时间复杂度指数
考虑一个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