[Leetcode /レター】異所性パケット・ハッシュ・テーブル(ハッシュマップパケット)

問題の説明:

一緒に文字列配列、異所性の単語文字を考えます。異所性ワード文字が同じ文字を指しますが、別の文字列に配置されています。

例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出: 
[ 
  [、]、 "お茶を" "食べる" "食べた" 
  []、 "NAT" "日焼け"、
  [ "バット"] 
]

説明:

  • すべての入力は小文字です。
  • 考慮されていなかった答えの順番。

基本的な考え方:

キーとして昇順で文字列。ベクトル型の値としてグループ化されます。

ACコード:

class Solution {
public:
    string ChangeOrder(string str) {
    // 返回字符升序排序的字符串
      string res;
      map<char, int> hashmap;
      for (char ch : str) {
        ++hashmap[ch];
      }
      // 按照自然顺序遍历
      for (char ch = 'a'; ch <= 'z'; ++ch) {
        for (int i = 0; i < hashmap[ch]; ++i) {
          res += ch;
        } 
      }
      return res;
    }
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
      map<string, vector<string>> hashmap;
      for (string str : strs) {
        hashmap[ChangeOrder(str)].push_back(str);
      }
      vector<vector<string>> res;
      for (auto it = hashmap.begin(); it != hashmap.end(); ++it) {
        res.push_back(it->second);
      }
      return res;
    }
};

ダニエルさんのアイデア:

上記のコードは、私たちは、文字列のコピーを渡すために、非常に長い時間を費やしました。

むしろハッシュマップに格納されているすべての結果は、その後、ベクトルに結果を一つずつコピーします。

直接操作ベクトルとして。ハッシュマップは、当社のベクトル関連した情報に格納されます。

(ここで、ベクターに格納されている行の数です)

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string,int>index;
        vector<vector<string>> result;
        for(auto i:strs)
        {
            //sort(i.begin();i.end());
            string tmp = i;
            sort(tmp.begin(),tmp.end());
            
            if(index.find(tmp)==index.end())
            {
                
                index.insert({tmp,(int)result.size()});
                result.push_back(vector<string>{i});
            }
            else
            {
                result[index[tmp]].push_back(i);
            }

        }
        return result;
    }
};

その他の経験:

  1.  直接にあなたは望むかもしれ返された結果セットで動作するので、あなたはスペースの無駄のコピーを作成するとき
  2. 私は、各文字列のソートソートカウンティング使用して実際には、我々は、メソッドをソート使用し、より効率的になります。
  3. 私たちは、ここでグループにハッシュマップを使用することができます鍵は私たちのグループをマークすることです。値は、グループメンバーの集合です
发布了137 篇原创文章 · 获赞 19 · 访问量 1万+

おすすめ

転載: blog.csdn.net/qq_43338695/article/details/102742579