★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-pgqpxffu-mb.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
This is a follow up of Shortest Word Distance. The only difference is now you are given the list of words and your method will be called repeatedly many times with different parameters. How would you optimize it?git
Design a class which receives a list of words in the constructor, and implements a method that takes two words word1 and word2 and return the shortest distance between these two words in the list.github
For example,
Assume that words = ["practice", "makes", "perfect", "coding", "makes"]
.微信
Given word1 = 「coding」
, word2 = 「practice」
, return 3.
Given word1 = "makes"
, word2 = "coding"
, return 1.app
Note:
You may assume that word1 does not equal to word2, and word1 and word2 are both in the list.函數
這是最短單詞距離的後續行動。惟一的區別是,如今您獲得了單詞列表,而且您的方法將使用不一樣的參數重複調用屢次。您將如何優化它?優化
設計一個類,該類接收構造函數中的單詞列表,並實現一個方法,該方法接受單詞1和單詞2,並返回列表中這兩個單詞之間的最短距離。spa
例如,設計
假設words=[「practice」、「makes」、「perfect」、「coding」、「makes」]。code
給定word1=「coding」,word2=「practice」,返回3。
給定word1=「makes」,word2=「coding」,返回1。
注:
您能夠假定word1不等於word2,word1和word2都在列表中。
1 class WordDistance { 2 var m:[String:[Int]] = [String:[Int]]() 3 init(_ words: [String]) { 4 // perform some initialization here 5 for i in 0..<words.count 6 { 7 //判斷是否爲空 8 if m[words[i]] == nil 9 { 10 m[words[i]] = [Int]() 11 } 12 m[words[i]]!.append(i) 13 } 14 } 15 16 func shortest(_ word1:String,_ word2:String) -> Int { 17 var i:Int = 0 18 var j:Int = 0 19 var res:Int = Int.max 20 while(i < m[word1]!.count && j < m[word2]!.count) 21 { 22 res = min(res, abs(m[word1]![i] - m[word2]![j])) 23 if m[word1]![i] < m[word2]![j] 24 { 25 i += 1 26 } 27 else 28 { 29 j += 1 30 } 31 } 32 return res 33 } 34 }