如何做好网站针对搜索引擎的seo,跨境电商怎么注册开店,网站做反向代理后样式加载错误,网站建设的竞争对手的分析Trie字符串统计
维护一个字符串集合#xff0c;支持两种操作#xff1a;
I x 向集合中插入一个字符串 x#xff1b;Q x 询问一个字符串在集合中出现了多少次。 共有 N个操作#xff0c;所有输入的字符串总长度不超过 105#xff0c;字符串仅包含小写英文字母。 输入格式…Trie字符串统计
维护一个字符串集合支持两种操作
I x 向集合中插入一个字符串 xQ x 询问一个字符串在集合中出现了多少次。 共有 N个操作所有输入的字符串总长度不超过 105字符串仅包含小写英文字母。 输入格式 第一行包含整数 N表示操作数。 接下来 N行每行包含一个操作指令指令为 I x 或 Q x 中的一种。
输出格式 对于每个询问指令 Q x都要输出一个整数作为结果表示 x在集合中出现的次数。 每个结果占一行。 数据范围 1≤N≤2∗104 输入样例 5 I abc Q abc Q ab I ab Q ab 输出样例 1 0 1
//用来快速存储、高效和查找字符串集合的 Trie树
#includeiostreamusing namespace std;const int N1e510;int son[N][26],cnt[N],idx;//son[N][26]每个节点最多有26个节点、cnt[N]以当前节点有多少个单词、idx存储当前用到的下标
//下标是0的点既是根节点又是空节点
char str[N];void insert(char str[]){//插入int p0;for(int i 0;str[i];i){int u str[i] - a;//将字母映射到0-25的数字编号if(!son[p][u]) son[p][u] idx;p son[p][u];}cnt[p];
}int query(char str[]){//查询int p0;for(int i0;str[i];i){int u str[i] - a;//搞到子节点的编号if(!son[p][u]) return 0;//不存在直接返回零pson[p][u];}return cnt[p];//返回单词的数量
}
int main(){int n;scanf(%d,n);while(n--){char op[2];scanf(%s%s,op,str);if(op[0] I) insert(str);//插入操作else printf(%d\n,query(str));//查询操作}return 0;
}