我正在制作黑客级别的问题陈述,其想法是绑架者想要使用杂志重新创建赎金票据,输入格式如下 -
6 4
今天晚上给我一个盛大的 今天给一个盛大
6和4分别是杂志和赎金中的单词计数,所以我只需要检查并返回"是"如果可以使用杂志中的单词重新创建赎金票据,否则返回"否"。
我的代码正常工作正常,但在两个测试用例中,输出打印错误,这是因为密钥末尾有额外的空间。
我首先将数组值计数到另一个数组中,然后通过比较赎金和杂志来检查数值。
我已经下载了测试用例,当我在本地测试它时,结果为No,这是因为杂志数组中的最后一个单词有一个额外的空格字符。
在这里搜索,你可以看到字符串末尾有一个额外的空格,因此字符串没有匹配,并且返回输出为" No"。我已经观察到,这是计算值后数组中的最后一个字符串。
在下面你有输入和预期输出的链接。
预期的O / P:是
<?php
$handle = fopen ("php://stdin","r");
fscanf($handle,"%d %d",$m,$n);
$magazine_temp = fgets($handle);
$magazine = explode(" ",$magazine_temp);
$ransom_temp = fgets($handle);
$ransom = explode(" ",$ransom_temp);
$countRan = array_count_values($ransom);
$countMag = array_count_values($magazine);
if(count($countRan) > count($countMag)) {
print "No";
return;
}
foreach ($countRan as $key => $value){
// exit if key not exists in $countMag array
// or exit if value in $countRan[$key] greater than $countMag[$key]
if (!array_key_exists($key, $countMag) || $value > $countMag[$key]) {
print "No";
return;
}
}
print "Yes";
?>
答案 0 :(得分:0)
我真的不确定我是否正确掌握了这一点,但这似乎工作正常。也许你可能觉得有用的一点是array_map('trim',$data);
件〜它会修剪尾随空格。
$url='https://hr-testcases-us-east-1.s3.amazonaws.com/24432/input16.txt?AWSAccessKeyId=AKIAJ4WZFDFQTZRGO3QA&Expires=1513762294&Signature=GoW9OnUfaKo3gwmM2X4L%2FpjQndM%3D&response-content-type=text%2Fplain';
$data=file_get_contents( $url );
$pieces=preg_split( '@\n@', $data );
$lengths=$pieces[0];
list( $l1, $l2 )=explode(' ',$lengths );
$magazine=array_map('trim',explode( ' ', $pieces[1] ) );
$ransom=array_map('trim', explode( ' ', $pieces[2] ) );
if( count( $magazine )!=count( $ransom ) ){
echo "No";
} else {
$intersection=array_intersect( $ransom, $magazine );
if( count( $intersection ) == count( $magazine ) && count( $intersection ) == count( $ransom ) ){
echo 'Yes';
} else { echo 'No'; }
}