正如标题所说,我的任务是在字符串中找到最长的重复序列,并且只能使用 linq 完成 - 没有 ifs,没有循环,没有尝试,只允许在变量初始化时赋值,允许递归。我在网上找到了解决方案,我了解正在发生的事情,但我无法将其转换为 linq - 我对它不太熟悉。如果有人可以帮助我,我将不胜感激。这是我发现的链接 - https://www.javatpoint.com/program-to-find-longest-repeating-sequence-in-a-string。
List<int> a = new List<int> {1, 2, 1, 2, 1, 2, 3, 2, 1, 2};
List<List<int>> aa = new List<List<int>>();
outerLoop(a);
var max = aa.Max(x => x.Count);
var m = from v in aa
where v.Count == max
select v;
m.Dump();
void outerLoop(List<int> list)
{
List<int> f = new List<int>();
f.AddRange(list.Skip(list.Count-1).Take(list.Count).ToList());
innerLoop(list, list.Skip(1).Take(list.Count).ToList());
f.ForEach(k => outerLoop(list.Skip(1).Take(list.Count).ToList()));
}
void innerLoop(List<int> l, List<int> subList)
{
List<int> f = new List<int>();
f.AddRange(subList.Skip(subList.Count-1).Take(subList.Count).ToList());
var tt = l.TakeWhile((ch, i) => i < subList.Count && subList[i] == ch).ToList();
aa.Add(tt);
f.ForEach(k => innerLoop(l, subList.Skip(1).Take(subList.Count).ToList()));
}
所以我想出了这个“美女”,我不认为它是好的代码,但我认为它有效。如果有人有兴趣并想提出如何使它变得更好的建议,他们非常欢迎:)
如果输入是int[] x= {1, 2, 1, 2, 1, 2, 3, 2, 1, 2}
结果应该是1212