Are Similar
Description
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 obtain
b
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 in
a
or inb
won’t makea
andb
equal.
Input/Output
-
[execution time limit] 4 seconds (js)
-
[input] array.integer a
Array of integers.
Guaranteed constraints:
3 ≤ a.length ≤ 105
,
1 ≤ a[i] ≤ 1000
. -
[input] array.integer b
Array of integers of the same length as a.
Guaranteed constraints:
b.length = a.length
,
1 ≤ b[i] ≤ 1000h
. -
[output] boolean
true
ifa
andb
are similar,false
otherwise.
[JavaScript (ES6)] Syntax Tips
1
2
3
4
5
6
// Prints help message to the console
// Returns a string
function helloWorld(name) {
console.log("This prints to the console when you Run Tests");
return "Hello, " + name;
}
Solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function areSimilar(a, b) {
var are = true;
var av = null;
var bv = null;
var swap = false;
for (var i = 0; i < a.length; i++) {
if (a[i] !== b[i]) {
if (av === null || bv === null) {
av = a[i]; bv = b[i];
} else {
if (swap || av !== b[i] || bv !== a[i]) {
are = false;
}
swap = true;
}
}
}
return are;
}