PHP - 黑客级别 - 赎金检查 - 字符串末尾的额外空格

时间:2017-12-20 07:39:39

标签: php arrays

我正在制作黑客级别的问题陈述,其想法是绑架者想要使用杂志重新创建赎金票据,输入格式如下 -

  

6 4
  今天晚上给我一个盛大的   今天给一个盛大

6和4分别是杂志和赎金中的单词计数,所以我只需要检查并返回"是"如果可以使用杂志中的单词重新创建赎金票据,否则返回"否"。

我的代码正常工作正常,但在两个测试用例中,输出打印错误,这是因为密钥末尾有额外的空间。

我首先将数组值计数到另一个数组中,然后通过比较赎金和杂志来检查数值。

我已经下载了测试用例,当我在本地测试它时,结果为No,这是因为杂志数组中的最后一个单词有一个额外的空格字符。

在这里搜索,你可以看到字符串末尾有一个额外的空格,因此字符串没有匹配,并且返回输出为" No"。我已经观察到,这是计算值后数组中的最后一个字符串。

在下面你有输入和预期输出的链接。

enter image description here

测试案例1: I / P - 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

预期的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";
?>

1 个答案:

答案 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'; }
}