题目:

给定一个较长字符串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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

看见这种前缀,大概率字典树。有几点要注意:1)原本字典树的bool值我们用int,初始值赋为-1,然后在insert时,将这个值记为当前词在small里面的index;2)search的时候,把big按位截取,并记录开始截取的点index,当search到字典树中的“单词”时,依据insert时内置的int来记录进答案。

代码:

class Solution {

public:

vector<vector<int>> multiSearch(string& big, vector<string>& small) {

res = vector<vector<int>>(small.size());

for (int i = 0; i < small.size(); i++) {

if (!small[i].empty())

insert(small[i], i);

}

for (int i = 0; i < big.size(); i++) {

string tmp = big.substr(i);

search(tmp, i);

}

return res;

}

private:

vector<vector<int>> res;

class Trie {

public:

Trie() {};

Trie* child[26] = { nullptr };

int index = -1;

};

Trie* trie = new Trie();

void insert(string &s, int index) {

Trie* tmp = trie;

for (int i = 0; i < s.size(); i++) {

int c = s[i] - 'a';

if (!tmp->child[c]) {

tmp->child[c] = new Trie();

}

tmp = tmp->child[c];

}

tmp->index = index;

}

void search(string& s, int start) {

Trie* tmp = trie;

for (int i = 0; i < s.size(); i++) {

int c = s[i] - 'a';

if (tmp->child[c]) {

tmp = tmp->child[c];

if (tmp->index != -1) {

res[tmp->index].push_back(start);

}

}

else {

return;

}

}

}

};

17.17. 多次搜索相关推荐

  1. [leetcode 面试题 17.17] -- 多次搜索,KMP与字典树

    [leetcode 面试题 17.17] -- 多次搜索 题目来源 分析 KMP思路 完整代码 字典树 完整代码 题目来源 https://leetcode-cn.com/problems/multi ...

  2. 字典树/Trie/前缀树-LeetCode总结:720词典中最长的单词;127. 单词接龙;677. 键值映射;面试题 17.17. 多次搜索;648. 单词替换

    MyTrie结构体和相关操作函数 typedef struct MyTrie {bool is_word;vector<MyTrie*> next;MyTrie():is_word(fal ...

  3. 解决微信H5获取SDK授权报错提示errMsg: “config:fail,Error: 系统错误,错误码:63002,invalid signature [20200908 22:17:17][]“

    如果常规检查都做过可以仔细看下微信开放文档 这个里面的报错原因 如果都不是那么极有可能是(恭喜你!看样子你的H5页面日活人数还蛮多[呲牙]) 获取腾讯微信平台access_token超过每日默认上限2 ...

  4. 分解成质因数(如435234=251*17*17*3*2

    分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题) void prim(int m, int n) {  if(m>n) {   while(m%n != 0) n++ ...

  5. 03/13 17:17:57: Launching 'app' on OPPO PBEM00. Installation did not succeed. The application could

    AndroidStudio连接真机测试项目时可能会报如下错误: 03/13 17:17:57: Launching 'app' on OPPO PBEM00. Installation did not ...

  6. LeetCode 17电话号码的字母组合(搜索)18四数之和

    电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23 ...

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

    文章目录 1. 题目 2. 解题 2.1 暴力超时 2.2 Trie树 1. 题目 给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串, ...

  8. LeetCode:面试题 17.17. 多次搜索

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

  9. LeetCode:17.17.多次搜索

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

最新文章

  1. 【青少年编程】【三级】打气球游戏
  2. cs106a编程方法学作业解答(3)
  3. abap常用系统变量
  4. LeetCode 491. 递增子序列(回溯+判重剪枝)
  5. 关于动态生成div的认识
  6. jQuery dataTables四种数据来源[转]-原文地址:http://xqqing79.iteye.com/blog/1219425
  7. 敏捷开发般若敏捷系列之三:什么是敏捷(下)(无住,不住于空,破空执,非法,非非法)...
  8. SqlZoo.net习题答案:Using the SELECT statement.【nobel】
  9. linux 中文输入鼠标跳动,解决wps for linux 中文输入法光标不跟随的问题
  10. php微积分难吗,两句话让你学好微积分
  11. Word 2019怎样自定义模板,并将自定义模板设为默认模板
  12. php图文编辑,ThinkPHP整合百度Ueditor编辑器的图文教程
  13. [GOM引擎]假人配置的脚本设置方法
  14. 番茄社区门店系统新增跑腿和空码功能
  15. 基于CAA的CATIA二次开发环境搭建全过程(亲测可用)
  16. Layui模板-laytpl
  17. #创建虚拟机器人URDF模型
  18. 自定义权限修改弹框_微信小程序自定义授权弹框
  19. Unity 实现2D地面挖洞!涂抹地形
  20. NBS-Predict:基于脑网络的机器学习预测

热门文章

  1. Qt基于QuaZIP实现文件压缩/解压(Win下)
  2. 用分析服务SSAS解决占比、同比和环比问题
  3. Bootstrap学习笔记03
  4. 个人目标日历定制制作小工具微信小程序源码
  5. 绘图仪PLT驱动格式
  6. centos6下使用有道云笔记
  7. MySQL解决方案:不能连接到MySQL服务器
  8. 制作光盘安装linux系统教程,在Windows上制作CentOS自动安装的光盘的教程
  9. 驼背矫正实在太难?看清这三点,了解驼背的成因 驼背问题也就迎刃而解
  10. ABLDT维护历史资产累计购置价值和累计折旧报错 ,消息号GLT2201 “未填写行项目001中平衡字段“利润中心”