题目链接:click~
/*题意:给出很多单词,输出所有的变位词
变位词:单词中的字符排序完以后是相同的*/
/**
*思路:1)从strs的第一个元素开始遍历,排序得到tmp
* 2)查看tmp是否在map中
* 3)若不存在,将(tmp,i)存入map中
* 4)若存在,通过保存的下标将第一次出现tmp的字符串加入res中,
* 再将下标设置为-1,放置重复加入
*/
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string> res;
map<string, int> mp;
int len = strs.size();
for(int i = 0; i < len; i ++) {
string tmp = strs[i];
sort(tmp.begin(), tmp.end());//排序
if(mp.find(tmp) == mp.end()) {//不存在,插入
mp[tmp] = i;
}
else {
if(mp[tmp] >= 0) {
//将第一个出现的单词插入
res.push_back(strs[mp[tmp]]);
mp[tmp] = -1;
}
res.push_back(strs[i]);
}
}
return res;
}
};