public void InitializeTest() { Assert.DoesNotThrow(() => StringAlgorithm.SuffixArray("".AsSpan())); Assert.DoesNotThrow(() => StringAlgorithm.SuffixArray <int>(Array.Empty <int>())); Assert.DoesNotThrow(() => StringAlgorithm.ZAlgorithm("".AsSpan())); Assert.DoesNotThrow(() => StringAlgorithm.ZAlgorithm <int>(Array.Empty <int>())); }
public void EmptyTest() { Assert.That(StringAlgorithm.SuffixArray("".AsSpan()).Length, Is.Zero); Assert.That(StringAlgorithm.SuffixArray <int>(Array.Empty <int>()).Length, Is.Zero); Assert.That(StringAlgorithm.ZAlgorithm("".AsSpan()).Length, Is.Zero); Assert.That(StringAlgorithm.ZAlgorithm <int>(Array.Empty <int>()).Length, Is.Zero); }
public static void Solve() { var N = Scanner.Scan <int>(); var S = Scanner.Scan <string>(); var answer = 0; for (var i = 0; i < N; i++) { var z = StringAlgorithm.ZAlgorithm(S.Substring(i)).ToArray(); for (var j = 0; j < z.Length; j++) { if (i + z[j] <= i + j) { answer = Math.Max(answer, z[j]); } } } Console.WriteLine(answer); }