我有一个初始列表如下:
ab, aj, ad, ae, bd, bc, bd, bg, bj, dj
算法应该与此列表中元素的第一个和最后一个共同字符相交以形成
abd, abj, bdj
最后(结果)
abdj
这是最长的交叉点。
有关算法的任何建议吗?
答案 0 :(得分:0)
看起来像一个简单的图搜索。这是一个解决方案,但没有花哨的东西(循环检查,缓存路径)。您应该添加这些以获得最佳性能。请注意,这是一个完整的图搜索及其所有弱点(即组合爆炸,NP等)
static List<string> _graph = new List<string>() { "ab", "aj", "ad", "ae", "bd", "bc", "bd", "bg", "bj", "dj" };
static void Main(string[] args)
{
string longest = string.Empty; // Result will be here.
foreach (string node in _graph)
GenerateChildren(node,ref longest);
}
static void GenerateChildren(string parent, ref string longest)
{
// Store longest path.
if (parent.Length > longest.Length)
longest = parent;
foreach (string child in _graph.Where(child=>parent.EndsWith(child.Substring(0,1))))
GenerateChildren(parent+child.Substring(1),ref longest);
}