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
bfromaby swapping2and1inb. -
For
a = [1, 2, 2]andb = [2, 1, 1], the output should beareSimilar(a, b) = false.Any swap of any two elements either in
aor inbwon’t makeaandbequal.
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
trueifaandbare similar,falseotherwise.
[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;
}