有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?
示例:
输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"
输出:1
var findClosest = function(words, word1, word2) {
const n = words.length
let i1 = i2 = -1, r = Number.MAX_SAFE_INTEGER
for (let i = 0; i < n; i++) {
if (words[i] === word1) i1 = i
else if (words[i] === word2) i2 = i
if (i1 > -1 && i2 > -1) r = Math.min(r, Math.abs(i1 - i2))
}
return r
};
function findClosest(words: string[], word1: string, word2: string): number {
const n = words.length
let i1 = -1, i2 = -1, r = 100000
for (let i = 0; i < n; i++) {
switch(words[i]) {
case word1:
i1 = i
break;
case word2:
i2 = i
break;
}
if (i1 > -1 && i2 > -1) r = Math.min(r, Math.abs(i1 - i2))
}
return r
};
func findClosest(words []string, word1 string, word2 string) int {
i1, i2, r := -1, -1, math.MaxInt64
for i, word := range words {
if word == word1 {
i1 = i
} else if word == word2 {
i2 = i
}
if i1 > -1 && i2 > -1 {
r = min(r, int(math.Abs(float64(i1 - i2))))
}
}
return r
}
func min(a int, b int) int {
if a < b {
return a
}
return b
}
func findClosest(words []string, word1 string, word2 string) int {
i1, i2, r := -1, -1, math.MaxInt64
for i, word := range words {
if word == word1 {
i1 = i
} else if word == word2 {
i2 = i
}
if i1 > -1 && i2 > -1 {
r = min(r, int(math.Abs(float64(i1 - i2))))
}
}
return r
}
func min(a int, b int) int {
if a < b {
return a
}
return b
}
class Solution {
public int findClosest(String[] words, String word1, String word2) {
int i1 = -1;
int i2 = -1;
int r = Integer.MAX_VALUE;
for (int i = 0; i < words.length; i++) {
if (words[i].equals(word1)) i1 = i;
else if (words[i].equals(word2)) i2 = i;
if (i1 > -1 && i2 > -1) r = Math.min(r, Math.abs(i1 - i2));
}
return r;
}
}
class Solution(object):
def findClosest(self, words, word1, word2):
i1, i2, r = -1, -1, sys.maxint
for i, word in enumerate(words):
if word == word1: i1 = i
elif word == word2: i2 = i
if i1 > -1 and i2 > -1: r = min(r, abs(i1 - i2))
return r
class Solution:
def findClosest(self, words: List[str], word1: str, word2: str) -> int:
i1, i2, r = -1, -1, sys.maxsize
for i, word in enumerate(words):
if word == word1: i1 = i
elif word == word2: i2 = i
if i1 > -1 and i2 > -1: r = min(r, abs(i1 - i2))
return r