Given a list of words and two words word1 and word2, return the shortest distance between these two words in the list.
For example,
Assume that words = ["practice", "makes", "perfect", "coding", "makes"]
.
Given word1 = “coding”
, word2 = “practice”
, return 3.
Given word1 = "makes"
, word2 = "coding"
, return 1.
Note:
You may assume that word1 does not equal to word2, and word1 and word2 are both in the list.
1 public class Solution { 2 public int ShortestDistance(string[] words, string word1, string word2) { 3 var dict = new Dictionary<string, IList<int>>(); 4 5 int i = 0, j = 0; 6 for (i = 0; i < words.Length; i++) 7 { 8 if (!dict.ContainsKey(words[i])) 9 { 10 dict[words[i]] = new List<int>(); 11 } 12 13 dict[words[i]].Add(i); 14 } 15 16 IList<int> l1 = dict[word1], l2 = dict[word2]; 17 int min = Int32.MaxValue; 18 i = 0; 19 20 while (i < l1.Count && j < l2.Count) 21 { 22 min = Math.Min(min, Math.Abs(l1[i] - l2[j])); 23 24 if (l1[i] >= l2[j]) 25 { 26 j++; 27 } 28 else 29 { 30 i++; 31 } 32 } 33 34 return min; 35 } 36 }