我最近申请了一份工作,并在几个问题上发了一个hackerrank考试.其中一个是霍夫曼解码算法.有可用的类似的问题在这里这也解释了格式化好了很多,然后我可以.
实际的任务是获取两个参数并返回已解码的字符串.
第一个参数是代码,它是一个字符串数组,如:
[
"a 00",
"b 101",
"c 0111",
"[newline] 1001"
]
Run Code Online (Sandbox Code Playgroud)
这就像:单个字符,两个标签,霍夫曼代码.
由于黑客级别的设置方式,新行被指定为采用此格式.
第二个参数是使用代码解码的字符串.例如:
101000111 = bac
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案:
function decode($codes, $encoded) {
$returnString = '';
$codeArray = array();
foreach($codes as $code) {
sscanf($code, "%s\t\t%s", $letter, $code);
if ($letter == "[newline]")
$letter = "\n";
$codeArray[$code] = $letter;
}
print_r($codeArray);
$numbers = str_split($encoded);
$searchCode = '';
foreach ($numbers as $number) {
$searchCode .= $number;
if (isset($codeArray[$searchCode])) {
$returnString .= $codeArray[$searchCode];
$searchCode = '';
}
}
return $returnString;
} …
Run Code Online (Sandbox Code Playgroud)