【LeetCode49】-字母异位词分组

方法一

实现思想

由于每一个字符在字符串的排列组合是很多的,为了便于比较直接将每一个字符串内部进行排序,排完序之后再将整个字符串数组进行排序,在排序的时候需要记录自己原本的数组下标,然后依次遍历字符串数组,当排序后的字符串相同,就将原本字符串的形式压入相同的字符串数组中即可。

实现代码

bool cmp(const pair<string,int> &a,const pair<string,int> &b){
    
    
    return a.first<b.first;
}
class Solution {
    
    
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
    
    
        vector<pair<string,int>> data(strs.size());
        for(int i=0;i<data.size();i++){
    
    
            string s(strs[i].begin(),strs[i].end());
            sort(s.begin(),s.end());
            data[i]=make_pair(s,i);
        }
        sort(data.begin(),data.end());
        vector<vector<string>> re;
        if(!strs.size()) return re;
        int index=0;
        vector<string> tt;
        tt.push_back(strs[data[0].second]);
        re.push_back(tt);
        for(int i=1;i<data.size();i++){
    
    
            if(data[i].first==data[i-1].first){
    
    
                re[index].push_back(strs[data[i].second]);
            }
            else{
    
    
                index++;
                vector<string> t;
                t.push_back(strs[data[i].second]);
                re.push_back(t);
            }
        }
        return re;
    }
};

提交结果及分析

在这里插入图片描述
需要对每一个字符串进行排序,然后对字符串数组进行排序

方法二(哈希)

实现思路

在这里插入图片描述尝试设计映射,将所有的映射到一起

(一)
在这里插入图片描述在这里插入图片描述
(二)
在这里插入图片描述在这里插入图片描述在这里插入图片描述

概括来说就是两种映射方法:一种以排完序之后的字符串,一种以出现过字符的数量(字符数统计向量)

总结

方法一:由于对所有字符串又进行了排序,需要确定原来的位置及原来的字符串所以额外使用了一个pair数据结构来维护。
方法二:想要用拍完序的字符串作为一个映射下标的标志,所以使用了map的数据结构来实现该功能。

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/115041989