面试题 17.11. 单词距离
单词距离
题目描述:
有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?
示例:
输入:words = [“I”,”am”,”a”,”student”,”from”,”a”,”university”,”in”,”a”,”city”], word1 = “a”, word2 = “student”
输出:1
提示:
words.length <= 100000
思路:
时间复杂度:O(n),空间复杂度O(n)
把两个单词的坐标放入数组中,然后用双指针做
代码:
func findClosest(words []string, word1 string, word2 string) int {
var a,b []int
res := 99999
for k,v := range words{
if v == word1{
a= append(a, k)
}
if v == word2{
b = append(b,k)
}
}
n1,n2 := len(a),len(b)
l,r := 0,0
for l< n1 && r < n2{
if a[l]>b[r]{
res = min(res, a[l]-b[r])
r++
}else{
res = min(res, b[r]-a[l])
l++
}
}
return res
}
func min(a,b int)int{
if a>b{
return b
}
return a
}
代码效率:
执行用时:64 ms, 在所有 Go 提交中击败了98.57%的用户
内存消耗:11.2 MB, 在所有 Go 提交中击败了95.71%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!