Anagram(回文构词法),哈希映射

来源:互联网 发布:2016网络最热门话题 编辑:程序博客网 时间:2024/06/06 17:11

本题源自LeetCode点击打开链接

 -------------------------------------------------------

思路: 回文即出现的字符串的字符顺序变化构成。

1  用一个map 做映射。map《string,int》

2 将字符串排序,然后放入map,值为 字符串在数组中的下标,保证了顺序

3 如果已经出现过,就将出现过的字符串压入结果。

代码1:

map<string,int> strMap;        vector<string> result;        int len=strs.size();        if(len==0)            return result;        for(int i=0;i<len;i++){            string tmp=strs[i];            sort(tmp.begin(),tmp.end());            if(strMap.count(tmp)==0){                strMap[tmp]=i;      //存放的是 字符串在数组中的下标。            }else{                if(strMap[tmp]>=0){    //说明出现过                    result.push_back(strs[strMap[tmp]]);  //先压入之前出现的,保证顺序                    strMap[tmp]=-1;                }                result.push_back(strs[i]);            }        }        return result;    }
代码2:

    vector<string> anagrams(vector<string> &strs) {       unordered_map<string,vector<string>> strMap;        vector<string> result;        int len=strs.size();        if(len==0)            return result;        for(string key:strs){            string temp=key;  //值为字符一样的原字符串            sort(key.begin(),key.end());  //键为排序后的字符串            strMap[key].push_back(temp);        }        for(auto it=strMap.begin();it!=strMap.end();it++){            if(it->second.size()>1){                result.insert(result.end(),it->second.begin(),it->second.end());            }        }        return result;    }