Problem:
Two arrays are called similar if one can be obtained from another by swapping at most one pair of elements in one of the arrays.
Given two arrays a
and b
, check whether they are similar.
Example
- For
a = [1, 2, 3]
andb = [1, 2, 3]
, the output should beareSimilar(a, b) = true
.The arrays are equal, no need to swap any elements. - For
a = [1, 2, 3]
andb = [2, 1, 3]
, the output should beareSimilar(a, b) = true
.We can obtainb
froma
by swapping2
and1
inb
. - For
a = [1, 2, 2]
andb = [2, 1, 1]
, the output should beareSimilar(a, b) = false
.Any swap of any two elements either ina
or inb
won’t makea
andb
equal.
Solution:
function areSimilar($a, $b) { $array_difference = array_diff_assoc($a, $b); if( empty( $array_difference )) return true; if( count($array_difference) === 2) { $b_a_array_difference = array_diff_assoc($b, $a); $is_equal = array_diff($array_difference, $b_a_array_difference); if(!empty($is_equal)) { return false; } return true; } return false; }