Javascript 表示原始字符串的子字符串的组合

Javascript 表示原始字符串的子字符串的组合,javascript,string,substring,combinations,Javascript,String,Substring,Combinations,我正在寻找一种方法来计算一个字符串的所有子字符串组合,这些组合表示原始字符串,所以 "ice" 返回 [ ["i", "c", "e"], ["i", "ce"], ["ic", "e"] ] 计算所有可能的子字符串都很容易,尽管我不知道如何得到上面类似的组合。谢谢你的帮助 干杯我可以建议分区号吗 您可以将此问题视为将表示子字符串长度的数字相加等于原始字符串长度的方法 例如,“ice”=3,则问题的解决方案为: 3 = 3 ("ice") 2 + 1 ([

我正在寻找一种方法来计算一个字符串的所有子字符串组合,这些组合表示原始字符串,所以

"ice"
返回

[
   ["i", "c", "e"],
   ["i", "ce"],
   ["ic", "e"]
]
计算所有可能的子字符串都很容易,尽管我不知道如何得到上面类似的组合。谢谢你的帮助


干杯

我可以建议分区号吗

您可以将此问题视为将表示子字符串长度的数字相加等于原始字符串长度的方法

例如,“ice”=3,则问题的解决方案为:

3 = 
    3 ("ice")
    2 + 1 (["ic", "e"])
    1 + 2 (["i", "ce"])
    1 + 1 + 1 (["i", "c", "e"])
请注意,wiki条目将组合视为顺序独立的,因此部分答案也取决于对每个组合生成排列。还要注意它爆炸的速度有多快

这类似于所有可能的分割位置

string: "ice"; positions: {1,2}

{}        ["ice"]
{1}       ["i", "ce"]
{2}       ["ic", "e"]
{1,2}     ["i", "c", "e"]
代码也类似:

function substringCombinations(str) {
    if (!str.length)
        return [[]];
    var res = [[str.charAt(0)]];
    for (var i=1; i<str.length; i++) {
        var c = str.charAt(i); // for each character
        for (var j=0, l=res.length; j<l; j++) {
            // either generate a new substring
            res.push(res[j].concat([c]));
            // or add it to the last substring
            res[j][res[j].length-1] += c;
        }
    }
    return res;
}

你要求他们保持秩序吗?例如[“ie”,“c”]将不是有效的组合?是的,[“ie”,“c”]将无效。如果对结果执行.join(“”),它应该等于您忘记的输入字符串
[“ice”]
。实际上我不需要原始字符串。这听起来确实像是一个选项。您可以为使用上述方法的实现提供[pseudo-]代码吗?我知道这在计算上会很长,输入时间会更长,我想你可以检查一下,它和你想要的非常相似,生成分区号也可以是递归的。我会看看上面的@hsorense我看过递归python解决方案,但这让我头疼,因为该解决方案不返回“.f.o.o.”,我根本不需要参数n。。。我仍然不清楚递归解决方案看起来是什么。作为一个额外的问题,我向达斯特鞠躬致敬:您如何修改上述方法,以获取参数n,它是子集组合长度的上界,因此子字符串组合(“ice”,2)返回[[“ice”],[“i”,“ce”],[“ic”,“e”]]
if(res[j].length<2)res.push(res[j].concat([c])应该这样做。
> function substringCombinations("ice")
[["ice"],
 ["i","ce"],
 ["ic","e"],
 ["i","c","e"]]