建筑工程网站导航,宁夏建设工程造价网站,wordpress乐器模版,自己怎么做微信小程序免费1. 题目
有个内含单词的超大文本文件#xff0c;给定任意两个单词#xff0c;找出在这个文件中这两个单词的最短距离(相隔单词数)。 如果寻找过程在这个文件中会重复多次#xff0c;而每次寻找的单词不同#xff0c;你能对此优化吗?
示例#xff1a;
输入#xff1a;w…1. 题目
有个内含单词的超大文本文件给定任意两个单词找出在这个文件中这两个单词的最短距离(相隔单词数)。 如果寻找过程在这个文件中会重复多次而每次寻找的单词不同你能对此优化吗?
示例
输入words [I,am,a,student,from,a,university,in,a,city],
word1 a, word2 student
输出1提示
words.length 100000来源力扣LeetCode 链接https://leetcode-cn.com/problems/find-closest-lcci 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 解题
类似题目
LeetCode 243. 最短单词距离 LeetCode 244. 最短单词距离 II哈希mapset二分查找 LeetCode 245. 最短单词距离 III
如果多次查询建立multimap查找 logn\log nlogn 复杂度用multimap底层是红黑树平衡二叉搜索树key 是单词value 是 序号该结构有序
class Solution {multimapstring,int m;
public:int findClosest(vectorstring words, string word1, string word2) {for(int i 0; i words.size(); i)m.insert(make_pair(words[i],i));auto it1 m.lower_bound(word1), end1 m.upper_bound(word1);auto it2 m.lower_bound(word2), end2 m.upper_bound(word2);int dis INT_MAX;while(it1 ! end1 || it2 ! end2){while(it1 ! end1 it2 ! end2 it1-second it2-second)dis min(dis, it2-second - it1-second);while(it1 ! end1 it2 ! end2 it2-second it1-second)dis min(dis, it1-second - it2-second);if(it1 end1 it2 ! end2){it1--;while(it2 ! end2){dis min(dis, abs(it1-second - it2-second));}it1;}else if(it1 ! end1 it2 end2){it2--;while(it1 ! end1){dis min(dis, abs(it2-second - it1-second));}it2;}}return dis;}
};