原題如下:
Given an array of strings, return all groups of strings that are anagrams.
不得不說,這道題的題意太模糊了,首先簡單介紹一下Anagram(迴文構詞法)。Anagrams是指由顛倒字母順序組成的單詞,比如“dormitory”顛倒字母順序會變成“dirtyroom”,“tea”會變成“eat”。
迴文構詞法有一個特點:單詞裏的字母的種類和數目沒有改變,只是改變了字母的排列順序。
思路:在對字符串比較之前進行排序是必須的,也就是將排序後的串作爲模式串存入map中,然後根據排序後是否相等判斷是否是迴文串,這裏需要注意的一個問題是模式串的處理:只有遇到相同的串時才能將模式串存入結果向量中,而在以後的判斷中只需加入待比較的串,所以需要通過改變模式串的下標值來標記其是否已被加入。
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string>v;
map<string,int>mp;
if(strs.size() <= 1)
return v;
for(int i = 0; i < strs.size(); i++){
string s = strs[i];
sort(s.begin(),s.end());
if(mp.find(s) == mp.end()){
mp[s] = i;
}
else{
if(mp[s] >= 0){
v.push_back(strs[mp[s]]);
mp[s] = -1;
}
v.push_back(strs[i]);
}
}
return v;
}
};