字符串 Anagrams

来源:互联网 发布:大数据在零售业的应用 编辑:程序博客网 时间:2024/05/17 09:35

思想:

题意是如果给定串中包含anagram,返回所有的anagram。

什么是anagram?

举个例子:teach和cheat就是一组Anagrams,它们都包含相同的字母a、c、e、h、t。

所以规律就是:如果串a和串b的字典序列相同,则它们就构成一组Anagrams。

用unordered_map,key为字典序列,value为一系列对应的Anagrams。


class Solution {public:    vector<string> anagrams(vector<string>& strs) {        vector<string> res;        unordered_map<string, vector<string>> group;        for(const string s : strs) {            string key = s;            sort(key.begin(),key.end());            group[key].push_back(s);        }        for(auto i = group.begin(); i != group.end(); i++) {            if(i->second.size() > 1) {                res.insert(res.end(), i->second.begin(), i->second.end());            }        }        return res;            }};



java code:

public class Solution {    public List<List<String>> groupAnagrams(String[] strs) {        List<List<String>> res = null;        if(strs == null || strs.length == 0) return res;                HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();                for(String str : strs) {            char[] temp = str.toCharArray();            Arrays.sort(temp);            String keyStr = String.valueOf(temp);            if(!map.containsKey(keyStr)) {                map.put(keyStr, new ArrayList<String>());            }            map.get(keyStr).add(str);        }              //sort every value    //      for(String key: map.keySet()) {//    Collections.sort(map.get(key));//    }            res = new ArrayList<List<String>>(map.values());        return res;    }}




0 0
原创粉丝点击