| |
|
开发:
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]出现的所有位置。 示例: 输入: 0 <= len(big) <= 1000 来源:力扣(LeetCode) 思路: 看见这种前缀,大概率字典树。有几点要注意: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; ????????????} ????????} ????} }; |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |