我正在嘗試學習 LINQ 我想了解如何從字串串列中獲取最長的公共前綴 {"a","abC","abcD"} 將回傳 "ab"。至少在其他 1 個字串中很常見。盡管“a”對于所有 3 個都是通用的,但我想得到“ab”,因為 2 個元素共享這個前綴并且“ab”比“a”長
uj5u.com熱心網友回復:
這是一個有趣的挑戰,這是我的解決方案:
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();
uj5u.com熱心網友回復:
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()
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471239.html
