程序员面试金典 - 面试题 17.17. 多次搜索(Trie树)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 暴力超时
      • 2.2 Trie树

1. 题目

给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串,对big进行搜索。
输出smalls中的字符串在big里出现的所有位置positions,其中 positions[i] 为 smalls[i] 出现的所有位置。

示例:
输入:
big = "mississippi"
smalls = ["is","ppi","hi","sis","i","ssippi"]
输出: [[1,4],[8],[],[3],[1,4,7,10],[5]]提示:
0 <= len(big) <= 1000
0 <= len(smalls[i]) <= 1000
smalls的总字符数不会超过 100000。
你可以认为smalls中没有重复字符串。
所有出现的字符均为英文小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multi-search-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 暴力超时

超时例子

class Solution {
public:vector<vector<int>> multiSearch(string big, vector<string>& smalls) {unordered_map<char,vector<int>> m;int i, j, n = smalls.size();bool found;vector<vector<int>> ans(n);for(i = 0; i < big.size(); ++i)m[big[i]].push_back(i);//每个字符开始的位置for(i = 0; i < n; ++i){if(smalls[i].empty())continue;for(auto idx : m[smalls[i][0]])//每个small单词开始的字符在big里的位置{found = true;if(big.size()-idx < smalls[i].size())break;for(j = 0; j < smalls[i].size(); ++j){	//对big中每个开始的位置开始向后查找smallif(big[idx+j] != smalls[i][j]){found = false;break;}}if(found)ans[i].push_back(idx);}}return ans;}
};

2.2 Trie树

  • 将 small 全部插入 trie 树
  • 遍历 big 的每个位置,并从 big 该位置开始在 trie 中查找
class trie
{
public:bool isEnd = false;trie* next[26] = {NULL};void insert(string& s){trie *cur = this;for(int i = 0; i < s.size(); ++i){if(!cur->next[s[i]-'a'])cur->next[s[i]-'a'] = new trie();cur = cur->next[s[i]-'a'];}cur->isEnd = true;}
};
class Solution {
public:vector<vector<int>> multiSearch(string big, vector<string>& smalls) {trie* t = new trie();unordered_map<string,int> m;int i, j, n = smalls.size();bool found;vector<vector<int>> ans(n);for(i = 0; i < n; ++i)m[smalls[i]] = i;for(i = 0; i < n; ++i)t->insert(smalls[i]);string s;trie* cur;for(i = 0; i < big.size(); ++i){s = "";cur = t;for(j = i; j < big.size(); ++j){if(!cur->next[big[j]-'a'])break;s += big[j];cur = cur->next[big[j]-'a'];if(cur->isEnd)ans[m[s]].push_back(i);}}return ans;}
};

336 ms 108.7 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雅虎的Mash-up 之路

当今的互联网&#xff0c;每天都会冒出许多的新产品、新技术、新概念&#xff0c;越来越多的Web N.0已经让我们看得眼花缭乱。现在业界对Mash-up有个比较统一的定义&#xff1a;Mash-up 模式指的是网站采用混合技术搭建&#xff0c;不同的功能模块与不同的外界API接口对接实现。…

python读单行文本求平均值_如何从文本文件python中的数字列表中找到平均值

在文本文件中&#xff0c;有一个名称列表&#xff0c;旁边有一个数字&#xff0c;表示他们在本例中的分数。有没有办法计算出文本文件中所有数字的平均值。在 代码&#xff1a;print("average calculator") option input("option: ") option_class input…

把狗画成擦边猛男,「AI绘画」能有多离谱?

文&#xff5c;哈哈哈波特源&#xff5c;知乎一个AI绘画小程序日增用户65.7万人&#xff0c;一周内突破100万&#xff0c;这个增长速度也算是一夜爆红了&#xff0c;AI画作一时间在朋友圈传得沸沸扬扬&#xff0c;不仅如此&#xff0c;还迅速引起一波短视频热潮&#xff0c;相关…

程序员面试金典 - 面试题 16.03. 交点(数学)

1. 题目 给定两条线段&#xff08;表示为起点start {X1, Y1}和终点end {X2, Y2}&#xff09;&#xff0c;如果它们有交点&#xff0c;请计算其交点&#xff0c;没有交点则返回空值。 要求浮点型误差不超过10^-6。若有多个交点&#xff08;线段重叠&#xff09;则返回 X 值最…

终结1.x时代,PyTorch 2.0来了!100%向后兼容,一行代码将训练提速76%

源&#xff5c;机器之心PyTorch 官方&#xff1a;我们这次的新特性太好用了&#xff0c;所以就直接叫 2.0 了。前段时间&#xff0c;PyTorch 团队在官方博客宣布 Pytorch 1.13 发布&#xff0c;包含 BetterTransformer 稳定版等多项更新。在体验新特性的同时&#xff0c;不少人…

python randint什么分布_python随机数分布random测试

因为概率问题&#xff0c;所以需要测试一下python的随机数分布。到底是平均&#xff08;均匀&#xff09;分布&#xff0c;还是正态&#xff08;高斯&#xff09;分布。 测试代码如下&#xff1a; #! /usr/bin/env python #codingutf-8 # # Describe : 测试random随机数分布 #…

LeetCode 1408. 数组中的字符串匹配(暴力查找)

1. 题目 给你一个字符串数组 words &#xff0c;数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。 如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] &#xff0c;那么字符串 words[i] 就是 words[…

逻辑性不好可以学python吗_如果本文若未能让你学会“Python”,可能真的不适合学习Python...

很多小伙伴们会问学习Python难学吗&#xff1f; python就是以他简单易学出名的。几乎是现在最简单&#xff0c;却可塑性最高的语言了。一般有其它编程语言基础的&#xff0c;自学&#xff0c;三小时左右就能学会。现在Python都有给小朋友的教程&#xff0c;简单程度可见一般。 …

意外地调用了方法或属性访问

我使用JAVASCRIPT动态创建HTML中的元素居然提示&#xff0c;“意外地调用了方法或属性访问”我的方法:function appendTag(element){var f document.createElement("font");f.setAttribute("style","color:red");var text document.createText…

谷歌要完,百度也危了

文 | 天于刀刀当我们在抱怨搜索引擎的时候我们具体在说些什么&#xff1f;也许是饱受诟病的广告&#xff1f;或者是不合理的网页排序&#xff1f;又或是一种最直观的感觉——不好使。但是从来没有人抱怨过搜索引擎这一个模式。尽管这些年&#xff0c;也诞生一些诸如Magi这样让人…

LeetCode 1409. 查询带键的排列(map模拟)

1. 题目 给你一个待查数组 queries &#xff0c;数组中的元素为 1 到 m 之间的正整数。 请你根据以下规则处理所有待查项 queries[i]&#xff08;从 i0 到 iqueries.length-1&#xff09;&#xff1a; 一开始&#xff0c;排列 P[1,2,3,…,m]。对于当前的 i &#xff0c;请你找…

根据年月日计算是星期几的函数,基姆拉尔森计算公式

算法如下&#xff1a; 基姆拉尔森计算公式W (d2*m3*(m1)/5yy/4-y/100y/400) mod 7 在公式中d表示日期中的日数&#xff0c;m表示月份数&#xff0c;y表示年数。 注意&#xff1a;在公式中有个与其他公式不同的地方&#xff1a; 把一月和二月看成是上一年的十三月和十四月&#…

centos7 如何安装部署k8s_如何在centos7上安装FreeIPA的客户端

1.文档编写目的在前面的文章《如何在Redhat7上安装FreeIPA》介绍了FreeIPA的安装及使用&#xff0c;本篇文章主要介绍如何在RedHat7上安装FreeIPA的客户端并配置。 2.内容概述1.环境准备2.安装FreeIPA客户端及使用3.总结及异常处理 3.测试环境1.centos 7.62.FreeIPA4.6.44.环境…

何恺明新作来了!更快更有效的训练FLIP

文 | Random源 | AIWalkerpaper&#xff1a;https://arxiv.org/abs/2212.00794本文提出一种用于训练CLIP的简单而有效的方案FLIP(Fast Language-Image Pre-training, FLIP),它在训练过程中对图像块进行大比例的随机Mask移除。Mask机制使得我们可以在有限周期内学习到更多的imag…

LeetCode 1410. HTML 实体解析器(哈希map)

1. 题目 「HTML 实体解析器」 是一种特殊的解析器&#xff0c;它将 HTML 代码作为输入&#xff0c;并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们对应的字符实体包括&#xff1a; 双引号&#xff1a;字符实体为 &quot; &#xff0c;对应的字符…

json和python中字典的区别和联系_Python 中json与字典的关系

Python开发中字典和 json的概念区别&#xff1a; json.dumps( dict )    字典变为字符 json.loads( jsoninput )    字符变为字典 一、字典 字典是一种数据结构&#xff0c;而json是一种数据格式,格式就会有一些形式上的限制&#xff0c;比如json的格式要求必须且只能使…

windows核心编程学习笔记(八)结构化异常处理(Structured Exception Handling)

首先要要知道&#xff0c;结构化异常处理(SEH)和C提供的异常处理不相同。一.Termination HandlersTermination Handlers使用很简单。在想使用SEH处理的地方使用__try{/* [__leave;] */}__finally{/* [AbnormalTermination] */}即可。SEH保证&#xff0c;无论__try中的代码怎样退…

本地唯一985,要去省会了!

源 | 软科&#xff08;ID&#xff1a;zuihaodaxue&#xff09;综合整理自福州市人民政府、各高校官网福州将迎来第三所985高校&#xff01;11月22日&#xff0c;福州市长吴贤德会见厦门大学党委书记张荣一行并座谈&#xff0c;双方就进一步加强校地合作进行深入交流。会上&…

LeetCode 1411. 给 N x 3 网格图涂色的方案数(数学)

1. 题目 你有一个 n x 3 的网格图 grid &#xff0c;你需要用 红&#xff0c;黄&#xff0c;绿 三种颜色之一给每一个格子上色&#xff0c;且确保相邻格子颜色不同&#xff08;也就是有相同水平边或者垂直边的格子颜色不同&#xff09;。 给你网格图的行数 n 。 请你返回给 …

元宇宙这么能赚?平均月薪近4万!

自2021年元宇宙元年之后&#xff0c;大批元宇宙相关岗位涌现在市场。近日&#xff0c;某网站发布《2022元宇宙行业人才发展报告》。2022年1-7月元宇宙相关招聘岗位同比增长16.6%&#xff0c;元宇宙相关岗位的平均招聘月薪18515元&#xff0c;深度学习岗平均月薪39971元&#xf…