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 an index mapping P
, from A
to B
. A
mapping P[i] = j
means the ith 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:
- A, B have equal lengths in range [1, 100].
- A[i], B[i] are integers in range [0, 10^5].
解决
1.数组A
中的每个数在数组B
中检查,得到index。(n为数组的大小)
- 时间复杂度为O(n * n)
- 空间复杂度为O(n)
class Solution {
public:
vector<int> anagramMappings(vector<int>& A, vector<int>& B) {
vector<int> result;
int num = A.size();
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if (A[i] == B[j]) {
result.push_back(j);
break;
}
}
}
return result;
}
};
2.将数组B
利用unordered_map储存起来,B[i]
作为key,i
作为key对应的值。再遍历数组A
,得到相应的index。(n为数组的大小)
- 时间复杂度为O(n)
- 空间复杂度为O(n)
class Solution {
public:
vector<int> anagramMappings(vector<int>& A, vector<int>& B) {
vector<int> result;
int num = A.size();
unordered_map<int, int> numbers;
for (int i = 0; i < num; i++) {
numbers[B[i]] = i;
}
for (int i = 0; i < num; i++) {
result.push_back(numbers[A[i]]);
}
return result;
}
};