我知道如何在O(n ^ 2)中执行此操作。但似乎存在更好的解决方案。
我找到了这个,并且有一个指向O(n)答案的链接,但这是用Haskell编写的,对我来说还不清楚。
得到用c#或类似语言的答案将是很棒的。
我已经找到了解决方案的明确解释这里 。感谢Justin提供此链接。
在这里,您可以找到该算法的Python和Java实现(C ++实现包含错误)。
这是C#实现,仅是这些算法的翻译。
public static int LongestPalindrome(string seq) { int Longest = 0; List<int> l = new List<int>(); int i = 0; int palLen = 0; int s = 0; int e = 0; while (i<seq.Length) { if (i > palLen && seq[i-palLen-1] == seq[i]) { palLen += 2; i += 1; continue; } l.Add(palLen); Longest = Math.Max(Longest, palLen); s = l.Count - 2; e = s - palLen; bool found = false; for (int j = s; j > e; j--) { int d = j - e - 1; if (l[j] == d) { palLen = d; found = true; break; } l.Add(Math.Min(d, l[j])); } if (!found) { palLen = 1; i += 1; } } l.Add(palLen); Longest = Math.Max(Longest, palLen); return Longest; }