Php 检查两个数组是否为;几乎相等”;(一个可以转换为另一个)
我有一个面试的问题,我不能得到,我认为这将是正确的地方问 问题的前提是检查两个数组是否“几乎相等” 背景: 给您两个数组A和B,其中Php 检查两个数组是否为;几乎相等”;(一个可以转换为另一个),php,arrays,algorithm,Php,Arrays,Algorithm,我有一个面试的问题,我不能得到,我认为这将是正确的地方问 问题的前提是检查两个数组是否“几乎相等” 背景: 给您两个数组A和B,其中count(B)>=count(A)。A和B中的元素是包含字母字符的字符串,可能还有一组花括号 例子: 像{This is{cool}}这样的东西永远不会出现,因为它有两组大括号 如果满足以下条件,则称阵列A和B“几乎相等”: B包含A中的每个元素 B中不在A中的每个元素都可以通过将花括号应用于A中的元素(Hello=>{Hello})或将A中元素内的花括号移动到
count(B)>=count(A)
。A和B中的元素是包含字母字符的字符串,可能还有一组花括号
例子:
像{This is{cool}}
这样的东西永远不会出现,因为它有两组大括号
如果满足以下条件,则称阵列A和B“几乎相等”:
- B包含A中的每个元素
- B中不在A中的每个元素都可以通过将花括号应用于A中的元素(
)或将A中元素内的花括号移动到元素外部(Hello=>{Hello}
)来获得这是{cool}=>{This is cool}
$a
中存在$b
中不存在的值,则上述检查将返回false
B中不在A中的每个元素都可以通过将花括号应用于A中的元素(
Hello
=>{Hello}
)或将A中元素内的花括号移动到元素外部(这是{cool}
=>{This is cool}
)来获得
我希望通过比较两个数组并完全删除括号来实现这一点,但规则或将A中元素中的花括号移到元素的外部表明,如果它位于其他单词的周围,则应该失败
情况并非如此,但您仍然可以删除大括号并将其放回每个字符串的边缘以进行比较:
/**
* Remove any braces in the value and put them back in at the edges of the string
* @param string $value
* @return string
*/
function addOrMoveBraces($value)
{
return sprintf('{%s}', str_replace(['{', '}'], '', $value));;
}
$aWithBraces = array_map('addOrMoveBraces', $a);
$bWithBraces = array_map('addOrMoveBraces', $b);
if (array_diff($bWithBraces, $aWithBraces) == array()) {
// Check #2: pass
}
把它放在一起
您需要一个函数,因此可以执行以下操作:
/**
* Remove any braces in the value and put them back in at the edges of the string
* @param string $value
* @return string
*/
function addOrMoveBraces($value)
{
return sprintf('{%s}', str_replace(['{', '}'], '', $value));;
}
function justAboutEqual($a, $b)
{
// Check #1
if (array_diff($a, $b) == array()) {
return true;
}
// Check #2
if (array_diff(array_map('addOrMoveBraces', $b), array_map('addOrMoveBraces', $a)) == array()) {
return true;
}
return false;
}
与这些功能相对。我会在这次面试中失败。我想知道他们是否只需要这个功能,所以他们推出了一个虚假的职位空缺,让求职者免费编写代码。哈哈,我想知道在整个面试过程中经常会出现这种情况
/**
* Remove any braces in the value and put them back in at the edges of the string
* @param string $value
* @return string
*/
function addOrMoveBraces($value)
{
return sprintf('{%s}', str_replace(['{', '}'], '', $value));;
}
$aWithBraces = array_map('addOrMoveBraces', $a);
$bWithBraces = array_map('addOrMoveBraces', $b);
if (array_diff($bWithBraces, $aWithBraces) == array()) {
// Check #2: pass
}
/**
* Remove any braces in the value and put them back in at the edges of the string
* @param string $value
* @return string
*/
function addOrMoveBraces($value)
{
return sprintf('{%s}', str_replace(['{', '}'], '', $value));;
}
function justAboutEqual($a, $b)
{
// Check #1
if (array_diff($a, $b) == array()) {
return true;
}
// Check #2
if (array_diff(array_map('addOrMoveBraces', $b), array_map('addOrMoveBraces', $a)) == array()) {
return true;
}
return false;
}