我有一个字符串,如"大坏狗",我怎么能得到一个字符串[]数组,其中包括所有可能的单词/短语组合?
因此,我想返回"大","坏","狗","大坏","坏狗"和"大坏狗" - 因此必须尊重原始字符串中单词的顺序.
这是用正则表达式完成的吗?
string[] array = new string[]{"big", "bad", "dog"};
for(ulong mask = 0; mask < (1ul << array.Length); mask++)
{
string permutation = "";
for(int i = 0; i < array.Length; i++)
{
if((mask & (1ul << (array.Length - 1 - i))) != 0)
{
permutation += array[i] + " ";
}
}
Console.WriteLine(permutation);
}
Run Code Online (Sandbox Code Playgroud)
编辑:不,它不能只使用一个正则表达式.
编辑:Per Eric Lippert,将面具更改为ulong(UInt64).
我认为这是递归求解的一个很好的问题.我的看法:
public static String[] findWords(params string[] args)
{
if (args.Count() == 0)
{
return new String[] { "" };
}
else
{
String[] oldWords = findWords(args.Skip(1).ToArray());
String[] newWords = oldWords.Where(word => word == "" || word.Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == args[1])
.Select(word => (args[0] + " " + word).Trim()).ToArray();
return oldWords.Union(newWords).ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
A findWords("big", "bad", "dog")返回您的短语列表.
编辑:编辑为仅包含连续短语.
| 归档时间: |
|
| 查看次数: |
2722 次 |
| 最近记录: |