Question

Given a list of words and two words word1 and word2, return the shortest distance between these two words in the list.

Example: Assume that words = ["practice", "makes", "perfect", "coding", "makes"].

Input: word1 = “coding”, word2 = “practice”
Output: 3
Input: word1 = "makes", word2 = "coding"
Output: 1

Note:

You may assume that word1 does not equal to word2, and word1 and word2 are both in the list.

Solution

class Solution(object):
    def shortestDistance(self, words, word1, word2):
        """
        :type words: List[str]
        :type word1: str
        :type word2: str
        :rtype: int
        """
        prev_w1, prev_w2 = -1, -1
        min_distance = len(words)

        for i in range(len(words)):
            if words[i] == word1:
                prev_w1 = i
                if prev_w2 != -1:
                    min_distance = min(min_distance, i - prev_w2)
            elif words[i] == word2:
                prev_w2 = i
                if prev_w1 != -1:
                    min_distance = min(min_distance, i - prev_w1)

        return min_distance