解题思路:
现将字典中的所有字符串存到mp1中,计算对应单词出现的次数,对每个字符串根据组成字母,从大到小排序整合存储到mp2中,计算对应单词出现的次数,最后输入测试字符串,num1变量记录在字典中与该字符串相同字符串出现次数(目的,相同单词不算Anigram),num2变量记录对该字符串进行排序后在mp2中出现的次数,最后两者相减即为Anigram的个数。
源码附上:
#include <iostream>
#include <algorithm>
#include<string>
#include <map>
using namespace std;
int main()
{
int N;
cin >> N;
int i, length;
string s;
map<string, int> mp1, mp2;
for (i = 0; i<N; i++)
{
cin >> s;
mp1[s]++;
//排序
sort(s.begin(), s.end());
mp2[s]++;
}
int Q;
cin >> Q;
for (i = 0; i<Q; i++)
{
cin >> s;
int num1 = mp1[s];
//排序
sort(s.begin(), s.end());
int num2 = mp2[s];
cout << (num2 - num1) << endl;
}
return 0;
}
最后:添加关于map容器的基本使用方法: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html