leetcode題庫——字母異位詞分組
阿新 • • 發佈:2018-11-11
題目描述:
給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:
輸入: ["eat", "tea", "tan", "ate", "nat", "bat"], 輸出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]
說明:
- 所有輸入均為小寫字母。
- 不考慮答案輸出的順序。
方法:
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<string>> res; vector<string> flag; if(strs.size()==0) return res; int length=strs.size(); int sign[length]={0}; typedef vector<pair<string,int>> S; S copy; for(int i=0;i<strs.size();i++){ copy.push_back(make_pair(strs[i],i)); sort(copy[i].first.begin(),copy[i].first.end()); } for(int j=0;j<copy.size();j++){ if(sign[j]==0){ sign[j]=1; flag.push_back(strs[copy[j].second]); } else continue; for(int k=j+1;k<copy.size();k++){ if(copy[j].first==copy[k].first&&sign[k]==0){ flag.push_back(strs[copy[k].second]); sign[k]=1; } } res.push_back(flag); flag.clear(); } return res; } };
思路:
定義pair結構體,將每個字串與其下標綁到一起,方便接下來的工作。
對捆綁後的copy中的每個字串排序,比如“afe”會變成“aef”,然後對每個字串進行比較是否相同,是否被使用過,如果相同且未被使用,則push到flag中,並標記已被使用,一次遍歷結束後,將flag push到最終的結果中。
其他:
應該有更好的方法,還請各位指教~~~