列表

详情


NC50350. Keywords Search

描述

给定n个长度不超过50的由小写英文字母组成的单词准备查询,以及一篇长为m的文章,问:文中出现了多少个待查询的单词。多组数据。

输入描述

第一行一个整数T,表示数据组数;
对于每组数据,第一行一个整数n,接下去n行表示n个单词,最后一行输入一个字符串,表示文章。

输出描述

对于每组数据,输出一个数,表示文中出现了多少个待查询的单词。

示例1

输入:

1
5
she
he
say
shr
her
yasherhs

输出:

3

原站题解

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

Java 解法, 执行用时: 417ms, 内存消耗: 19896K, 提交时间: 2023-02-23 11:12:43

import java.util.*;

/**
 * @author 11214
 * @since 2023/2/23 9:33
 */
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while (t-- > 0) {
            HashMap<String, Integer> candidates = new HashMap<>();
            int n = sc.nextInt();
            for (int i = 0; i < n; i++) {
                String s = sc.next().toLowerCase();
                candidates.put(s, candidates.getOrDefault(s, 0) + 1);
            }

            int ans = 0;
            String document = sc.next().toLowerCase();
            for (Map.Entry<String, Integer> kv : candidates.entrySet()) {
                if (document.contains(kv.getKey())) {
                    ans += kv.getValue();
                }
            }
            System.out.println(ans);
        }
    }
}

C++(clang++ 11.0.1) 解法, 执行用时: 90ms, 内存消耗: 5612K, 提交时间: 2023-02-23 11:09:48

#include <bits/stdc++.h>
using namespace std;
 
int main(){
	int T,n,ans[100001];
	string wz;
	string dc[100001];
	cin >> T;
	for (int i = 1;i <= T;i++){
		cin >> n;
		for (int j = 1;j <= n;j++){
			cin >> dc[j];
		}
		cin >> wz;
		for (int j = 1;j <= n;j++){
			if (wz.find(dc[j]) <= 1000000){               // 重点!
				ans[i]++;
			}
		}
	}
	for (int i = 1;i <= T;i++){
		cout << ans[i] << endl;
	}
}

上一题