使用c#查找集合(句子)的所有子集

Nik*_*RED 4 c#

如何使用c#查找集合的所有子集?这里设置的是一个句子(字符串).例如:s ="我是nik";那将是什么代码?

这里s的子集将是 - > i,am,nik,i am,i nik,am nik,我是nik.

Ant*_*ram 7

这是我写的一个函数,用于查找给定数组中所有不相关的子集.

List<T[]> CreateSubsets<T>(T[] originalArray)
{
    List<T[]> subsets = new List<T[]>();

    for (int i = 0; i < originalArray.Length; i++)
    {
        int subsetCount = subsets.Count;
        subsets.Add(new T[] { originalArray[i] });

        for (int j = 0; j < subsetCount; j++)
        {
            T[] newSubset = new T[subsets[j].Length + 1];
            subsets[j].CopyTo(newSubset, 0);
            newSubset[newSubset.Length - 1] = originalArray[i];
            subsets.Add(newSubset);
        }
    }

    return subsets;
}
Run Code Online (Sandbox Code Playgroud)

因此给定一个1,2,3,4,5的整数数组,它将返回一个List<int[]>包含31个子集.

编辑:根据您的更新,您可以使用上面的函数生成所需的6个子集,并在原始句子上使用string.Split('').考虑:

string originalString = "i am nik";
List<string[]> subsets = CreateSubsets(originalString.Split(' '));

foreach (string[] subset in subsets)
{
    Console.WriteLine(string.Join("\t", subset));
}
Run Code Online (Sandbox Code Playgroud)