面试题 17.11. 单词距离
题目大意
有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?
示例:
输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"
输出:1
数据范围:
words.length <= 100000
思路
遍历一遍该字符串数组,在遍历过程中标记word1
与word2
的位置,以及更新两者间的最短距离。这样操作的话,可以比较所有的word1
与word2
的距离,因此比较后可得到答案。
代码
class Solution {
public:
int findClosest(vector<string>& words, string word1, string word2) {
int res = INT_MAX;
int l = -1, r = -1;
for(int i = 0; i < words.size(); i ++ ){
if(words[i] == word1) l = i;
if(words[i] == word2) r = i;
if(l != -1 && r != -1) res = min(res, abs(r - l)); // 可比较所有的r与l的距离
}
return res;
}
};
复杂度
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
1
)
O(1)
O(1)