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;
    } 
    
  • 相关阅读:
    2.3、css颜色表示法
    2.2、css文本设置
    2.1、css基本语法及页面引用
    1.10、html内嵌框架
    1.9、html表单
    1.8、html表格
    1.7、html列表
    1.6、html链接
    1.5、html图像、绝对路径和相对路径
    1.4、html块、含样式的标签
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026782.html
Copyright © 2011-2022 走看看