【LeetCode】Anagrams(筆記)

Description

Given an array of strings, return all groups of strings that are anagrams.

Example

Given ["lint", "intl", "inlt", "code"], return ["lint", "inlt", "intl"].

Given ["ab", "ba", "cd", "dc", "e"], return ["ab", "ba", "cd", "dc"].

Challenge

What is Anagram?
- Two strings are anagram if they can be the same after change the order of characters.

Anagram就是字符串的字符順序不同,只要注意到string也是可以排序的就簡單了。

Solution

class Solution {
public:    
    /**
     * @param strs: A list of strings
     * @return: A list of strings
     */
    vector<string> anagrams(vector<string> &strs) {
        // write your code here
        if(strs.size()==0 || strs.size()==1)
            return strs;
        //vector<string> newStrs;本想存排序後的每個str,實際可以不要
        map<string,int> strsMap;      //pais<string,int>('str',index)調序後字符串和索引
        bool* flag = new bool[strs.size()];   
        for(int i=0;i<strs.size();i++)
            flag[i] = false;
        vector<string> resStrs;
        for(int i=0;i<strs.size();i++){
            string sortStr = strs[i];
            sort(sortStr.begin(),sortStr.end());  //sort也可以處理string類型
            map<string,int>::iterator it = strsMap.find(sortStr);
            if(it!=strsMap.end()){
                flag[it->second] = true; //map映射索引,能修改已存入map的上一個str的flag
                flag[i] = true;
                strsMap[sortStr] = i;  //索引改成重複str的當前這個
            }else{
                strsMap[sortStr] = i;  //不重複的str
            }
        }
        for(int i=0;i<strs.size();i++){
            if(flag[i])
                resStrs.push_back(strs[i]);
        }
        return resStrs;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章