给定一组电话号码,判断它们是否一致,即没有一个号码是另一个的前缀。假设电话目录列出了以下号码:
紧急电话 911 爱丽丝 97 625 999 鲍勃 91 12 54 26
在这种情况下,你不能拨打鲍勃的电话,因为只要你拨打了鲍勃电话号码的前三个数字,中央就会将您的电话转接到紧急电话。因此,此列表不一致。
输入
输入的第一行包含一个整数t,表示测试用例的数量,1≤t≤40。每个测试用例都以单独的一行n(1≤n≤10000)开始,表示电话号码的数量。然后是n行,每行一个唯一的电话号码。电话号码是最多十个数字的序列。
输出
对于每个测试用例,如果列表一致,则输出“YES”,否则输出“NO”。
程序应该从标准输入读取,然后写入标准输出。我们也可以假设输入将遵守规范。这是我的代码:
<?php
fscanf(STDIN, "%d", $numOfTestCases);
for ($i = 0; $i < $numOfTestCases; $i++) { //Loop for reading test cases
fscanf(STDIN, "%d", $numOfPhoneNumbers);
$phoneNumbers = array();
$isConsistent = true;
for ($j = 0; $j < $numOfPhoneNumbers; $j++) { //Loop for reading phone numbers of each test case
fscanf(STDIN, "%d", $newNumber);
if ($isConsistent != false) { //If list already inconsistent, we dont need to check further input
if (empty($phoneNumbers)) { // If the array of phone numbers is empty, we just add the new one
$phoneNumbers[$j] = $newNumber;
} else {
foreach ($phoneNumbers as $k => $testNumber) { //Loop for checking if new number is consistent or not
$newNumLen = strlen($newNumber);
$testNumlen = strlen($testNumber);
$newBeginning = substr($newNumber, 0, $testNumlen);
$testBeginning = substr($testNumber, 0, $newNumLen);
if ($newNumber == $testBeginning || $testNumber == $newBeginning) {
$isConsistent = false;
break;
}
}
if ($isConsistent == true) $phoneNumbers[$j] = $newNumber;
}
}
}
$newAnswer = ($isConsistent) ? "YES" : "NO";
$ansString = ($i == 0) ? $newAnswer : $ansString."\n".$newAnswer;
}
fwrite(STDOUT, $ansString);
exit(0);
?>
我的问题是有一个测试程序正在运行此代码,并且其超时时间为4秒。第二个测试文件总是超时。我无法访问测试程序或文件,但我认为该文件非常长,甚至可能包含40个测试用例,每个用例有10000个电话号码。
有人能否看出如何使这段代码以任何方式更快地运行?
以下是示例运行:
Sample Input:
2
3
911
97625999
91125426
5
113
12340
123440
12345
98346
Sample Output:
NO
YES