列表

详情


NC50992. 前缀统计

描述

给定N个字符串,接下来进行M次询问,每次询问给定一个字符串T,求中有多少个字符串是T的前缀。输入字符串的总长度不超过,仅包含小写字母。

输入描述

第一行两个整数N,M。接下来N行每行一个字符串Si。接下来M行每行一个字符串表示询问。

输出描述

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

示例1

输入:

3 2
ab
bc
abc
abc
efg

输出:

2
0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3 解法, 执行用时: 1082ms, 内存消耗: 11264K, 提交时间: 2023-03-07 14:02:44

dit = {}
n, m = map(int, input().split())
for i in range(n):
    s = input()
    if s not in dit:
        dit[s] = 1
    else:
        dit[s] += 1

for i in range(m):
    s = input()
    res = 0
    for i in range(len(s)+1):
        stmp = s[0:i]
        if stmp in dit:
            res += dit[stmp]
    print(res)

C++ 解法, 执行用时: 351ms, 内存消耗: 10672K, 提交时间: 2022-01-24 17:02:38

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n,m,i;
	cin>>n>>m;
	string s;
	map<string, int>q;//映射
	while(n--) {
		cin>>s;
		q[s]++;
	}
	while(m--) {
		int sum=0;
		cin>>s;
		string a;
		for(i=0; i<s.size(); i++) {
			a=a+s[i];
			sum=sum+q[a];
		}
		cout<<sum<<endl;
	}
	return 0;
}

上一题