算法基础之Trie字符串统计

Trie字符串统计

  • 核心思想:数组模拟树

    • cnt为记录的字符串个数

    •   #include
        using namespace std;
        const int N=100010;
        
        int cnt[N],son[N][26],idx;
        char str[N];
        
        void insert(char str[]){
            int p=0;
            for(int i=0;str[i];i++){
                int u=str[i] - 'a';  //将字符转换为数字作下标 实际仍然是储存字符
                if(!son[p][u]) son[p][u] = ++idx;  //如果没有该节点 创建一个新节点存储
                p = son[p][u];  //往下走 p是有内在联系的 不一定是连在一起的
            }
            cnt[p] ++;  //最终得到的唯一的p记录一下存在
        }
        int query(char str[]){
            int p=0;
            for(int i=0;str[i];i++){
                int u=str[i]-'a';
                if(!son[p][u]) return 0;  //没找到
                p = son[p][u];  //往下走
            }
            return cnt[p];  //返回个数
        }
        
        int main(){
            int n;
            cin>>n;
            while(n--){
                string op;
                cin>>op>>str;
                if(op=="I") insert(str);
                else cout<<query(str)<<endl;
            }
        }
      

你可能感兴趣的:(算法,c++,数据结构)