程序员面试金典 - 面试题 17.17. 多次搜索(Trie树)
生活随笔
收集整理的這篇文章主要介紹了
程序员面试金典 - 面试题 17.17. 多次搜索(Trie树)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 暴力超時
- 2.2 Trie樹
1. 題目
給定一個較長字符串big和一個包含較短字符串的數組smalls,設計一個方法,根據smalls中的每一個較短字符串,對big進行搜索。
輸出smalls中的字符串在big里出現的所有位置positions,其中 positions[i] 為 smalls[i] 出現的所有位置。
來源:力扣(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 中查找
336 ms 108.7 MB
總結
以上是生活随笔為你收集整理的程序员面试金典 - 面试题 17.17. 多次搜索(Trie树)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 65. 有效数字(逻辑
- 下一篇: 程序员面试金典 - 面试题 08.10.