任何10字符串的子序列如果格式为1010...10
(10
连接任意次数),则称为humongous。
例如,10个字符串110
恰好包含2个巨大的子序列,而1010
恰好包含4个巨大的子序列(使用索引{1, 2}, {3, 4}, {1, 4}, {1, 2, 3, 4}
形成)。
请不要误会我问这个问题的解决方案,我只是问10010
有多少重要的后续序列以及它们的索引是什么。
答案 0 :(得分:1)
(我认为这是一个家庭作业问题,要求一个程序来计算大量的子序列。我在这里使用这里描述的折衷方案:How do I ask and answer homework questions?。即我没有给出一个完整的解决方案。在代码中分配,但提出一种思考/解释的方式似乎是合理的,并且应该允许继续做作业。)
这个“巨大”的定义对我来说是未知的。我们假设该定义是由教师定义的,只适用于这个问题 似乎'交替的“1”和“0”的任何子序列以“1”开头并以“0”结尾,这将更像是一个定义,而不是基于例子的。
(我也不会将{1,4}描述为子序列。它不是连续的 但这似乎只是我的观点,正如Dukeling所引用和支持的那样。)
考虑不需要连续的子序列,例如{1,3}也将被视为示例“1010”的后续序列,虽然是非常大的(“11”)。
通过对定义的解释,“10010”的大量子序列的计数将是
{1,2}
{1,3}
{1,5}
{4,5}
{1,2,4,5}
{1,3,4,5}
答案 1 :(得分:0)
这太有趣了。以下是您问题的编码答案:
10010
有多少个巨大的子序列?点击查看!
function countHumongousSubs(s){
let count_subs_ending_in_one = 0;
let count_subs_ending_in_zero = 0;
let i = 0;
while (s[i]){
if (s[i] == '1')
count_subs_ending_in_one += 1 + count_subs_ending_in_zero;
else
count_subs_ending_in_zero += count_subs_ending_in_one;
i++;
}
return count_subs_ending_in_zero;
}
console.log(countHumongousSubs('10010'));
/* https://stackoverflow.com/users/1447675/nina-scholz */
.as-console-wrapper { max-height: 100% !important; top: 0; }
他们的指数是什么?点击查看!
function humongousSubIndices(s){
let indices_ending_in_one = [];
let indices_ending_in_zero = [];
let i = 0;
while (s[i]){
if (s[i] == '1'){
indices_ending_in_one =
indices_ending_in_one.concat(
indices_ending_in_zero.map(x => x.concat([i+1]))
);
indices_ending_in_one.push([i+1]);
} else {
indices_ending_in_zero =
indices_ending_in_zero.concat(
indices_ending_in_one.map(x => x.concat([i+1]))
);
}
i++;
}
return indices_ending_in_zero;
}
console.log(JSON.stringify(humongousSubIndices('10010')));
/* https://stackoverflow.com/users/1447675/nina-scholz */
.as-console-wrapper { max-height: 100% !important; top: 0; }