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

问题描述 投票:-2回答:1

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

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

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

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

我首先将数组值的计数值转换为另一个数组,并通过比较赎金和杂志的键来检查值。

我已经下载了测试用例,当我在本地测试它时,结果为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";
?>
php arrays
1个回答
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'; }
}
© www.soinside.com 2019 - 2024. All rights reserved.