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]

asP[0] = 1because the0th element ofAappears atB[1], andP[1] = 4because the1st element ofAappears atB[4], and so on.

Note:

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

先遍历一遍B,记录每个数组和相应的index,再遍历一遍A,找出该数字在B中相应的index。有个值得注意的事情是可能存在duplicate,这时候直接记录index会把之前的index overwrite,所以需要一个list/queue/stack来储存所有index。

class Solution {
    public int[] anagramMappings(int[] A, int[] B) {
        HashMap<Integer, LinkedList<Integer>> map = new HashMap<Integer, LinkedList<Integer>>();
        int[] res = new int[A.length];

        for(int i = 0; i < B.length; i++) {
            if(!map.containsKey(B[i]))
                map.put(B[i], new LinkedList<Integer>());
            map.get(B[i]).offer(i);
        }

        for(int i = 0; i < A.length; i++) {
            res[i] = map.get(A[i]).poll();
        }

        return res;
    }
}

results matching ""

    No results matching ""