Given two listsA
andB
, andB
is an anagram ofA
.B
is an anagram ofA
meansB
is made by randomizing the order of the elements inA
.
We want to find anindex mappingP
, fromA
toB
. A mappingP[i] = j
means thei
th element inA
appears inB
at indexj
.
These listsA
andB
may contain duplicates. If there are multiple answers, output any of them.
For example, given
A = [12, 28, 46, 32, 50]
B = [50, 12, 32, 46, 28]
We should return
[1, 4, 3, 2, 0]
as
P[0] = 1
because the
0
th element of
A
appears at
B[1]
, and
P[1] = 4
because the
1
st element of
A
appears at
B[4]
, and so on.
Note:
A, B
have equal lengths in range
[1, 100]
.A[i], B[i]
are integers in range
[0, 10^5]
.class Solution {
public int[] anagramMappings(int[] A, int[] B) {
if (A == null || B == null) return new int[0];
Map<Integer, List<Integer>> hash = new HashMap<>();
for (int i = 0; i < B.length; i++){
if (hash.containsKey(B[i])){
hash.get(B[i]).add(i);
}
else{
List<Integer> temp = new ArrayList<>();
temp.add(i);
hash.put(B[i], temp);
}
}
int[] ans = new int[A.length];
for (int i = 0; i < A.length; i++){
List<Integer> l = hash.get(A[i]);
ans[i] = l.get(0);
l.remove(0);
}
return ans;
}
}