Given two listsAandB, andBis an anagram ofA.Bis an anagram ofAmeansBis made by randomizing the order of the elements inA.
We want to find anindex mappingP, fromAtoB. A mappingP[i] = jmeans theith element inAappears inBat indexj.
These listsAandBmay 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;
}
}