关键词查询

news/2024/11/23 3:44:02/

一 问题描述

在现代,谷歌、百度等搜索引擎走进了每个人的生活。

Wiskey 也希望将这个特性引入到他的图像检索系统中。

每个图像都有一个很长的描述,当用户健入一些关犍字来查找图像时,系统会将关键字与图像的描述进行匹配,并显示出匹配关犍字最多的图像。

为了简化问题,给你一个图像的描述,和一些关犍字,你应该告诉我有多少关犍字将匹配。

二 输入和输出

1 输入

第 1 行将包含一个整数,表示后面将有多少个测试用例。

每个测试用例包含一个整数 n 表示关键字的数目,n 个关键字紧随其后。

每个关键字只包含 a 到 z,长度不超过 50。

最后一行是描述,长度不超过 1000000。

2 输出

打印描述中包含多少关键字。

三 输入和输出样例

1 输入样例

1

5

she

he

say

shr

her

yasherhs

2 输出样例

3

四 分析和设计

1 分析

在一个字符串中查询有多少个关键字出现,典型的多模匹配问题,可以采用 AC 自动机解决。

2 设计

a 将每个关键字插入到字典树中。

b 在字典树中添加失配指针,创建 AC 自动机。

c 在 AC 自动机中查询字符串包含多少个关键字。

五 代码

package com.platform.modules.alg.alglib.hdu2222;import java.util.LinkedList;
import java.util.Queue;public class Hdu2222 {public static int K = 26;public String output = "";void init() // 初始化{superRoot = new node();root = new node();root.fail = superRoot;for (int i = 0; i < K; i++)superRoot.ch[i] = root;superRoot.count = -1;}private node superRoot;private node root;void insert(String str) // Trie 的插入{node t = root;int len = str.length();for (int i = 0; i < len; i++) {int x = str.charAt(i) - 'a';if (t.ch[x] == null)t.ch[x] = new node();t = t.ch[x];}t.count++;}void build_ac() {Queue<node> q = new LinkedList<>(); // 队列,BFS使用q.add(root);while (!q.isEmpty()) {node t;t = q.peek();q.poll();for (int i = 0; i < K; i++) {if (t.ch[i] != null) {t.ch[i].fail = t.fail.ch[i];q.add(t.ch[i]);} elset.ch[i] = t.fail.ch[i];}}}int query(String str) {int ans = 0;node t = root;int len = str.length();for (int i = 0; i < len; i++) {int x = str.charAt(i) - 'a';t = t.ch[x];for (node u = t; u.count != -1; u = u.fail) {ans += u.count;u.count = -1;}}return ans;}public String cal(String input) {int n;String str1;String str2;init();String[] line = input.split("\n");n = Integer.parseInt(line[0]);int count = 1;while (n-- > 0) {str2 = line[count++];insert(str2);}build_ac();str1 = line[count];output += query(str1) + "\n";return output;}
}class node {node fail;node ch[] = new node[Hdu2222.K];int count;node() {fail = null;for (int i = 0; i < ch.length; i++) {ch[i] = null;}count = 0;}
};

六 测试

 


http://www.ppmy.cn/news/548929.html

相关文章

如何优化关键词搜索排名(提升关键词排名的方法)

百度SEO排名因素怎么优化某个词库关键词排名&#xff1f; 如何对词库关键词进行排名&#xff1f;对具体网站进行有针对性的诊断和分析&#xff0c;做好词库布局匹配。基础站内外搜索优化。 如何优化公司网站的关键词和产品词汇一直是企业网站SEO优化网站管理员思考的问题。如…

网站怎么快速优化关键词排名?

网站想要快速优化关键词排名&#xff0c;不能要求一口吃成一个胖子&#xff0c;而是需要懂得循环渐进&#xff0c;知道如何做好每一步优化工作&#xff0c;才能值得网站优化效果又快又好。所以&#xff0c;企业可以根据以下4个方法&#xff1a; 1、做好内容布局 内容最好…

关键词搜索-免费搜索关键词排名软件

关键词搜索&#xff1a;只需要输入核心词&#xff0c;一键挖掘关键词 同行关键词搜索&#xff1a;输入网站&#xff0c;一键采集同行关键词分析 关键词查询&#xff1a;通过输入关键词实时查询网站排名 关键词搜索&#xff0c;网站的流量是由关键词带来的&#xff0c;所以关键词…

使用ChatGPT,开发复杂的java多线程需求。

需求 需要使用多线程&#xff0c;批量生成账号&#xff0c;并插入数据库 直接喂给ChatGPT如下promt GPT返回 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service;import java.util.concurrent.*; import j…

关键词排名查询-各大搜索引擎批量实时关键词排名查询

关键词排名查询&#xff0c;市面上很多关键词排名查询的功能&#xff0c;都不是实时&#xff01;掌握一个实时关键词排名的数据&#xff0c;有助于网站SEO优化的下一步决策。更大大的提高了对网站的数据掌控。免费关键词排名查询详细如下图&#xff08;支持批量实时关键词排名查…

[Verfication]如何在env中实现task/function 形参类型可变

最近在项目中遇到需要改变task/function 形参类型&#xff0c;寻求了一种实现方法&#xff0c;记录一下~~ virtual class SCB_SRC#&#xff08;type Tint, int BW 32&#xff09;;extern static task data_cmp(string gld_file, ref T dut_q[$], bit[BW-1:0] gld_q_q[$][$], v…

CentOs中操作用户命令(添加或删除)

1、不添加任何参数,创建 zhangsan 用户 不加参数时,创建用户默认创建一个用户目录以及用户和组同名,且UID和GID相同 useradd zhangsan 用 id和 ll 命令查看一下,是否成功创建用户目录以及用户和用户组 id ll uid1003( zhangsan) gid1003( zhangsan) 组1003( zhangsan) 2…

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 / LeetCode 235. 二叉搜索树的最近公共祖先(二叉搜索树性质,搜索与回溯)

题目&#xff1a; 链接&#xff1a;剑指 Offer 68 - I. 二叉搜索树的最近公共祖先&#xff1b;LeetCode 235. 二叉搜索树的最近公共祖先 难度&#xff1a;中等 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对…