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);
        }
Пример #3
0
        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);
        }