zoukankan      html  css  js  c++  java
  • #Trie 142. 前缀统计

    给定N个字符串S1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1~SN中有多少个字符串是T的前缀。

    输入字符串的总长度不超过106,仅包含小写字母。

    输入格式
    第一行输入两个整数N,M。

    接下来N行每行输入一个字符串Si。

    接下来M行每行一个字符串T用以询问。

    输出格式
    对于每个询问,输出一个整数表示答案。

    每个答案占一行。

    输入样例:
    3 2
    ab
    bc
    abc
    abc
    efg
    输出样例:
    2
    0

    #include<bits/stdc++.h>
    using namespace std;
    int pos=1,trie[1000010][26],num[1000010];
    void Insert(string s){
    	int c=0;
    	for(int i=0;i<s.size();i++){
    		int n=s[i]-'a';
    		if(trie[c][n]==0)
    			trie[c][n]=pos++;
    		c=trie[c][n];
    	}
    	num[c]++;//这里将插入的串当做一个整体,因为它是前缀
    }
    int Find(string s){
    	int c=0,ans=0;
    	for(int i=0;i<s.size();i++){
    		int n=s[i]-'a';
    		if(!trie[c][n])
    			break;//没有不要反回0,停下就好,不然会输出0;
    		c=trie[c][n];
    		ans+=num[c];
    	}
    	return ans;
    }
    int main(){
    	int n,m;
    	cin>>n>>m;
    	while (n--){
    		string s;
    		cin>>s;
    		Insert(s);
    	} 
    	while(m--){
    		string s;
    		cin>>s;
    		cout<<Find(s)<<endl;
    	}
    	return 0;
    } 
    
  • 相关阅读:
    vision transformer
    亮剑,gacutil.exe
    MOSS自定义登陆页面
    查看应用程序的进程ID
    基于AD的表单认证 Moss2010
    js 实现拖动
    获取指定数据库表, 以及指定表的数据信息
    二分法
    JZ053表示数值的字符串
    JZ054字符流中第一个不重复的字符
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026782.html
Copyright © 2011-2022 走看看