# 760 Find Anagram Mappings

Given two lists`A`and`B`, and`B`is an anagram of`A`.`B`is an anagram of`A`means`B`is made by randomizing the order of the elements in`A`.

We want to find anindex mapping`P`, from`A`to`B`. A mapping`P[i] = j`means the`i`th element in`A`appears in`B`at index`j`.

These lists`A`and`B`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 0th element of A appears at B\[1], and P\[1] = 4 because the 1st element of A appears at B\[4], and so on.

**Note:**&#x20;

1. A, B have equal lengths in range \[1, 100].
2. A\[i], B\[i] are integers in range \[0, 10^5].

**The Idea:** Map the indices of `B` into a list. Then iterate through `A` and build a new list `P` that take the corresponding index of `B` that is mapped from a key of `A`. We solve the problem of duplicates by mapping to a list of elements, and simply taking the last one (as order does not pattern).

**Complexity:** O(N) time and space

```python
import collections


class Solution:
    def anagramMappings(self, A, B):
        """
        :type A: List[int]
        :type B: List[int]
        :rtype: List[int]
        """

        B_map = collections.defaultdict(list)
        for i, b in enumerate(B):
            B_map[b].append(i)

        P = []
        for a in A:
            P.append(B_map[a].pop())

        return P
```
