leetcode-字母异位词

241-有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

leetcode-字母异位词_第1张图片
核心思路:用哈希表或数组来记录每个字符出现的次数,并一一进行比较。

方法一:数组

    bool isAnagram(string s, string t) {
        if(s.size()!=t.size())
            return false;
       int num[128];//ASCALL码共128个
        for(int i=0;i<128;++i)
       {
           num[i]=0;
       }
       for(int i=0;i<s.size();++i)
       {
           num[s[i]]++;
           num[t[i]]--;
       }
       for(int i=0;i<128;++i)
       {
           if(num[i]!=0)
            {
                return false;
            }
       }
       return true;
    }
  1. 时间复杂度:O(n)
  2. 空间复杂度:O(1)

方法二:哈希表

class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.size()!=t.size())
            return false;
        unordered_map<char,int> m;
        for(int i=0;i<s.size();++i)
        {
            m[s[i]]++;
        }
         for(int i=0;i<s.size();++i)
        {
           if(m[t[i]]>0)
           {
               m[t[i]]--;
           } 
           else
                return false;           
        }
       return true;
    }
};
  1. 时间复杂度:O(n)
  2. 空间复杂度:O(n)

49-字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

leetcode-字母异位词_第2张图片

方法一:排序

由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> mp;
        for (string& str: strs) {
            string key = str;
            sort(key.begin(), key.end());
            mp[key].emplace_back(str);
        }
        vector<vector<string>> ans;
        for (auto it = mp.begin(); it != mp.end(); ++it) {
            ans.emplace_back(it->second);//哈希表可以用second
        }
        return ans;
    }
};
  1. 时间复杂度:O(nklogk),其中n是strs中的字符串的数量,k是strs中的字符串的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是O(nklogk)。
  2. 空间复杂度:O(nk),主要为哈希表所占用的空间。

你可能感兴趣的:(哈希表,数组,leetcode,算法)