我正在尝试解决Kattis上的Phone List problem。
它的工作正常,但我无法通过第二个测试用例!它会因“超出时间限制”错误而停止。我见过没有工作解决方案的其他线程......
using System;
using System.Collections.Generic;
using System.Linq;
namespace PhoneList
{
class Program
{
static void Main(string[] args)
{
long testCases = Int64.Parse(Console.ReadLine());
for (int i = 0; i < testCases; i++)
{
List<string> phoneNumbers = new List<string>();
long phoneNumbersCount = Int64.Parse(Console.ReadLine());
for (int j = 0; j < phoneNumbersCount; j++)
{
phoneNumbers.Add(Console.ReadLine().Trim());
}
var consistent = phoneNumbers.FirstOrDefault(t2 => phoneNumbers.Exists(t1 => t1.StartsWith(t2) && !t1.Equals(t2)));
switch (consistent)
{
case null:
Console.WriteLine("YES");
break;
default:
Console.WriteLine("NO");
break;
}
}
}
}
}
我已经多次重写了,但现在我停了下来。我不能为我的生活找出什么运行速度超过3秒的时间限制。由于测试数据是秘密的,我不知道Kattis有多少人进入......
更新
用以下代码替换LINQ查询:
phoneNumbers.Sort();
var consistent = true;
for(int x = 1; x < phoneNumbers.Count; x++)
{
if (phoneNumbers[x].StartsWith(phoneNumbers[x - 1]))
{
consistent = false;
break;
}
}