我需要能够找到不同数量的单词组合,其中单词在字符串中彼此相邻。
示例:
字符串:one two three four
我需要找到这样的组合:
one two
two three
three four
one two three
two three four
组合可能会变大,具体取决于字符串中的单词数量。 我很挣扎,因为最初的字符串可以是任意数量的单词。
修改
这段代码甚至不是很接近,但我正在努力克服这一切的逻辑。我的下面的代码做出了我不知道的假设。
string[] inputs = input.Replace("/", "").Split('-');
List<string> returnList = new List<string>();
for (int i = 0; i <= inputs.Length; i++ )
{
returnList.Add(inputs[i]);
if (i > 0)
{
returnList.Add(inputs[i - 1] + " " + inputs[i] + " " + inputs[i + 1]);
}
}
答案 0 :(得分:2)
这是一个C#解决方案,它使用了一些LINQ ...
static void Main(string[] args)
{
const string startingString = "one two three four";
List<string> l = startingString.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).ToList();
var combinations = l.Select(q => FindPairs(q, l))
.ToList()
.SelectMany(r => r);
foreach (var combination in combinations)
{
Console.WriteLine(String.Join(",", combination));
}
}
private static List<List<string>> FindPairs(string s, List<string> list)
{
List<List<string> > result = new List<List<string>>();
int index = list.IndexOf(s);
for (int t = 2; t < list.Count; t++)
{
if (index + t <= list.Count)
{
var words = list.Skip(index).Take(t).ToList();
if (words.Count() >= 2)
{
result.Add(words);
}
}
}
return result;
}
它产生结果......
one,two
one,two,three
two,three
two,three,four
three,four
与您的问题中的结果相匹配。解决方案的关键是结合Take和Skip运算符。 LINQ的SelectMany将列表列表展平为一个列表。
答案 1 :(得分:-1)
您可以首先在源字符串上调用String.Split函数,使用&#34; &#34; (或其他空格)作为分隔符。这将为您提供一个字符串数组,其中每个元素都是一个单词。之后,使用嵌套循环来构建每个字符串,如下面的代码所示:
private static List<string> GetStringCombos(string sourceString)
{
string[] sourceArray = sourceString.Split(' ');
var newStrings = new List<string>();
for (int startIndex = 0; startIndex < sourceArray.Length; startIndex++)
{
for (int endIndex = startIndex; endIndex < sourceArray.Length; endIndex++)
{
string newString = "";
for (int currentIndex = startIndex; currentIndex <= endIndex; currentIndex++)
{
newString = string.Join(" ", newString, sourceArray[currentIndex]);
}
newStrings.Add(newString.Trim());
}
}
return newStrings;
}