【发布时间】:2019-04-29 09:37:46
【问题描述】:
我正在处理一个字典表,需要找出一个单词中所有可能的字符组合。感谢https://codereview.stackexchange.com/questions/28248/implement-a-function-that-prints-all-possible-combinations-of-the-characters-in,到目前为止我的工作如下:
public List<string> findAllOccurance(string str)
{
var results = from e in Range(0, BigInteger.Pow(2, str.Length))
let p =
from b in Enumerable.Range(1, str.Length)
select (e & BigInteger.Pow(2, b - 1)) == 0 ? (char?)null : str[b - 1]
select string.Join(string.Empty, p);
return results.ToList();
}
public IEnumerable<BigInteger> Range(BigInteger start, BigInteger count)
{
while (count-- > 0)
{
yield return start++;
}
}
将“abc”传递给上述函数将返回:
a
b
ab
c
ac
bc
abc
问题是我实际上只想找出“原始顺序”中的“连接”排列,例如“abc”应该只返回
a
b
c
ab
bc
abc
有人知道我应该改变什么来实现上述目标吗?
【问题讨论】:
-
@SaniSinghHuttunen - OP 想要“连接”字符 - “a”和“c”由“b”分隔。基本上需要的是长度为 1 到全长的所有子字符串的列表 - 这可以通过两个 for 循环轻松实现。
-
给定一个“abab”的起始字符串 - 你的预期结果是什么?
-
@PaulF 我猜如果我理解 OP 并且他处理重复的案例只保留具有连续字符的唯一案例,那么接受的结果将是 a、b、ab、ba、aba、bab、abab。
-
@Dblaze47 没错,这就是我想要实现的目标,包括消除重复的部分,但“连接”是我遇到的麻烦。
标签: c# permutation