首先看题目介绍
有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?
示例:
输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"
输出:1
解题思路
一次遍历 + 双指针
用start和end两个指针分别记录对应单词的下标索引,计算出下标位距离,并记录其差的绝对值的最小值,最后返回记录好的最短距离
public static void main(String[] args) {
String[] words = {"I", "am", "a", "student", "from", "a", "university", "in", "a", "city"};
String word1 = "a", word2 = "student";
int closest = findClosest(words, word1, word2);
System.out.println(closest);
}
public static int findClosest(String[] words, String word1, String word2) {
int start = -1, end = -1, min = 10000;
for (int i = 0; i < words.length; i++) {
if (words[i].equals(word1)) {
start = i;
if (end != -1) {
// 记录最短距离
min = Math.min(min, Math.abs(start - end));
}
} else if (words[i].equals(word2)) {
end = i;
if (start != -1) {
// 记录最短距离
min = Math.min(min, Math.abs(end - start));
}
}
}
return min;
}