c#:如何从字符串列表中获得最长的公共前缀LINQ表达式



我正在学习LINQ我想了解如何从字符串列表中获得最长的公共前缀{"a"abC"abcD"}会返回"ab"。常见的,至少在一个其他字符串有它。尽管"都是通用的,我想得到"ab"因为两个元素共享这个前缀和"ab"长度大于"a">

这是一个有趣的挑战,这是我的解决方案:

var array = new []{"a","abC","abcD"};
var longestCommonPrefix = Enumerable.Range(1, array.Max(_ => _)!.Length)
.Select(i =>
{
var grouped = array.Where(x => x.Length >= i)
.GroupBy(x => x[..i])
.Where(x => x.Count() > 1)
.OrderByDescending(x => x.Count())
.Select(x => new { LongestCommonPrefix = x.Key })
.FirstOrDefault();
return grouped?.LongestCommonPrefix ?? string.Empty;
}).Max();
var longestCommonPrefix = (words.FirstOrDefault() ?? String.Empty)
.Substring(0,
Enumerable.Range(0, words.Any() ? words.Min(x => x.Length) + 1 : 0)
.Where(x => words.Select(w => w.Substring(0, x))
.Distinct().Count() == 1).DefaultIfEmpty(0).Max()
);

最新更新