Is two arrays are similar?

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] and b = [1, 2, 3], the output should be
    areSimilar(a, b) = true.The arrays are equal, no need to swap any elements.
  • For a = [1, 2, 3] and b = [2, 1, 3], the output should be
    areSimilar(a, b) = true.We can obtain b from a by swapping 2 and 1 in b.
  • For a = [1, 2, 2] and b = [2, 1, 1], the output should be
    areSimilar(a, b) = false.Any swap of any two elements either in a or in b won’t make a and b 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;
}

Leave a Reply

Your email address will not be published. Required fields are marked *