【问题标题】:Combinations of substrings that represent original string表示原始字符串的子字符串组合
【发布时间】:2014-06-02 14:46:04
【问题描述】:

我正在寻找一种方法来计算一个字符串的所有子字符串组合,连接起来代表原始字符串,所以

"ice"

返回

[
   ["i", "c", "e"],
   ["i", "ce"],
   ["ic", "e"]
]

计算所有可能的子字符串很容易,尽管我不知道如何得到上述类似的组合。任何帮助表示赞赏。

干杯

【问题讨论】:

  • 您是否要求它们井井有条?像 ["ie", "c"] 这样的组合不是有效的组合吗?
  • 是的,["ie", "c"] 无效。如果您对结果执行 .join("") 它应该等于输入字符串
  • 你忘了["ice"]
  • 我其实不需要原始字符串..

标签: javascript string substring combinations


【解决方案1】:

这类似于所有可能的拆分位置的generating the power set

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;
}

> function substringCombinations("ice")
[["ice"],
 ["i","ce"],
 ["ic","e"],
 ["i","c","e"]]

【讨论】:

  • 太棒了。我向尘土低头
  • 作为一个额外的问题:你将如何修改上述方法,以获取参数 n,它是子集组合长度的上限,所以 substringCombinations("ice",2)返回 [["ice"],["i","ce"],["ic","e"]]
  • if (res[j].length &lt; 2) res.push(res[j].concat([c])); 应该这样做。
【解决方案2】:

我可以建议分区号http://en.wikipedia.org/wiki/Partition_%28number_theory%29吗?

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

例如,"ice" = 3,那么您的问题的解决方案是:

3 = 
    3 ("ice")
    2 + 1 (["ic", "e"])
    1 + 2 (["i", "ce"])
    1 + 1 + 1 (["i", "c", "e"])

请注意,wiki 条目将组合视为与顺序无关,因此您的部分答案取决于生成每个组合的排列。还要注意这爆炸的速度有多快。

【讨论】:

  • 这听起来绝对是一种选择。您能否为使用上述方法的实现提供[伪]代码?而且我知道对于更长的输入,这在计算上会很长
  • 我认为你可以查看this question,这与你想做的事情非常相似
  • 生成分区号也可以是递归的。我会看看上面的@hsorensen
  • 我看过递归python解决方案,但这让我很头疼,因为该解决方案不返回“.foo”,而且我根本不需要参数n......我还不清楚递归解决方案看起来像什么
猜你喜欢
  • 2020-02-06
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多