IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 17.17. 多次搜索 -> 正文阅读

[数据结构与算法]17.17. 多次搜索

题目:

给定一个较长字符串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;

????????????}

????????}

????}

};

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:22:01  更:2022-03-06 13:26:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:36:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码