面试题 17.11. 单词距离
有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?
示例:
输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"
输出:1
提示:
words.length <= 100000
题解:
- 先用list保存两个单词在words中出现的位置
- 使用双指针,计算两个单词位置的最小距离
class Solution {
public int findClosest(String[] words, String word1, String word2) {
// 记录word1 和 word2 在 words中出现的位置
List<Integer> wps1 = new ArrayList<>();
List<Integer> wps2 = new ArrayList<>();
for (int i=0;i<words.length;++i) {
if (words[i].equals(word1)) {
wps1.add(i);
}
if (words[i].equals(word2)) {
wps2.add(i);
}
}
int p = 0;
int q = 0;
int minLen = Integer.MAX_VALUE;
// 使用双指针,对比两个word在words中出现的位置
while (p<wps1.size() && q<wps2.size()) {
int inxP = wps1.get(p);
int inxQ = wps2.get(q);
if (inxP > inxQ) {
if (minLen > inxP-inxQ) {
minLen = inxP-inxQ;
}
q++;
} else {
if (minLen > inxQ-inxP) {
minLen = inxQ-inxP;
}
p++;
}
}
return minLen;
}
}
本文探讨如何通过双指针优化算法解决大文本文件中任意两个单词之间的最短距离问题,减少重复搜索,并在给定空间限制下提高效率。实现细节包括利用word列表存储位置、对比指针移动以找到最小距离。
203

被折叠的 条评论
为什么被折叠?



