梁越

统计大文件中字符串出现的次数

0 人看过

面试场景题

如果有一个大文件,里面全是ip字符串,现在需要统计每个ip出现的次数,并且ip长度都挺长的,怎么在不使用map的情况下怎么统计,或者怎么优化

hashmap

要统计单词的次数,可以直接上map,但是可能字符会占挺多内存,这时候可以考虑字符转化为int之后再进行map,如果是ip字符串可以参考

字典树

力扣面试题 16.02. 单词频率

struct Trie{
    Trie* son[26];
    int cnt=0;
    Trie(){
        for(int i=0;i<26;i++){
            son[i]=nullptr;
        }
    }
};
class WordsFrequency {

private:
    Trie *root;
public:

    WordsFrequency(vector<string>& book) {
        root=new Trie();
        Trie* temp;
        for(auto item:book){
            temp = root;
            for(auto ch:item){
                int index=ch-'a';
                if(!temp->son[index]) temp->son[index]=new Trie();
                temp=temp->son[index];
            }
            ++temp->cnt;
        }
    }

    int get(string word) {
        Trie* temp=root;
        for(auto ch:word){
            int index=ch-'a';
            if(temp->son[index]) temp=temp->son[index];
            else return 0;
        }
        return temp->cnt;
    }
};