我想检查字符串是否是从给定字符串集中的另外两个字符串构建的。
例如,给定以下数组:
var arr = new string[] { "b", "at", "bat", "ct", "ll", "ball", "ba"};
我只想返回“bat”和“ball”。
那是因为它们可以由数组中的其他两个元素组成,如下所示:
"bat" = "b" + "at"
"ball" = "ba" + "ll"
我尝试过使用foreach循环,但我并没有完全正确。 任何帮助将不胜感激。
我做过像
这样的事情foreach(var x in list)
{
if (dataaccess.IsThreeCharacters(x))
{
for (int i = 0; i < arr.Length; i++)
{
for (int j = i; j < arr.Length; j++)
{
if(x == arr[i] + arr[j])
{
newlist.Add(x);
}
}
}
}
}
答案 0 :(得分:5)
这将为您提供可以从序列中的其他值组成的所有值:
var values = new HashSet<string>(new[] { "b", "at", "bat", "ct", "ll", "ball", "ba" });
var compositeValues =
from value in values
from otherValue in values
where value != otherValue
let compositeValue = value + otherValue
where values.Contains(compositeValue)
select compositeValue;
注意使用HashSet<string>
,它提供O(1)查找性能,而不是数组的O(N)。
答案 1 :(得分:1)
虽然我没有保证提高效率,但这应该有效!
static void Main(string[] args)
{
var arr = new string[] { "b", "at", "bat", "ct", "ll", "ball", "ba" };
var composites = from s in arr
from lhs in arr
from rhs in arr
where s == string.Concat(lhs, rhs)
select s;
foreach (var composite in composites)
{
Console.WriteLine(composite);
}
Console.ReadLine();
}