I’m very close on this. I got a question posed to me yesterday by a developer if I could have a look at this.
I feel close, but I think some people here would appreciate the challenge too and I am lost.
If I have a List<string> which has the following members:
Today
Monday
Tuesday
Wednesday
I want to get a return string day because this is the largest common string in the List<string>. This should be done irrespective of position and string length, just want to find the largest length common string in a host of strings.
My attempt failed a bit miserably, I selected:
Monday – Tuesday
Monday – Wednesday
And then did an Intersect between each. Obviously this would return multiple strings, however for Monday - Wednesday you get nday because that is what letters it has common.
Here is my code:
List<string> strs = new List<string>();
strs.Add("Monday");
strs.Add("Tuesday");
strs.Add("Wednesday");
var v = strs.SelectMany((day, i) => strs.Select((day2, j) => new
{
iDay = i,
Day = day,
iDay2 = j,
Day2 = day2
})).Where(x => x.iDay != x.iDay2).Select(x => new string(x.Day.Intersect(x.Day2).ToArray()));
Anybody have a nice and neat solution?
NOTE
It doesn’t have to be LINQ
If there isn’t a common string, return null or empty string.
This works better than my first approach(striked out).
You can use following extension to get all substrings of the shortest string in the list(for efficiency):
Length(longest first)Enumerable.Allreturns immediately if one string doesn’t contain a given substring)DEMO