Program to find minimum distance of two given words in a text in Python


Suppose we have three strings text, w1, and w2. The text is a sentence with different words. We have to find the smallest distance between any two occurrences of w1 and w2 in the text, the distance is measured in number of words in between them. If either w1 or w2 is not present in text, return -1.

So, if the input is like text = "joy happy power happy joy joy power happy limit" w1 = "power" w2 = "limit", then the output will be 1, as there is only one word "happy" in between the power and limit.

To solve this, we will follow these steps −

  • index1 := null, index2 := null

  • distance := 999999

  • for each index idx and word w in text, do

    • if w is same as w1, then

      • if index2 is not null, then

        • distance := minimum of distance and (|idx - index2| - 1)

      • index1 := idx

    • if w is same as w2, then

      • if index1 is not null, then

        • distance := minimum of distance and (|idx - index1| - 1)

      • index2 := idx

  • if index1 is not null and index2 is not null, then

    • return distance

  • return -1

Example

Let us see the following implementation to get better understanding

def solve(text, w1, w2):
   index1 = None
   index2 = None
   distance = 2000000
   for idx, word in enumerate(text.split(" ")):
      if word == w1:
         if index2 is not None:
            distance = min(distance, abs(idx - index2) - 1)
         index1 = idx
      if word == w2:
         if index1 is not None:
            distance = min(distance, abs(idx - index1) - 1)
         index2 = idx
   if index1 is not None and index2 is not None:
      return distance
   return -1

text = "joy happy power happy joy joy power happy limit"
w1 = "power"
w2 = "limit"
print(solve(text, w1, w2))

Input

"joy happy power happy joy joy power happy limit", "power", "limit"

Output

1

Updated on: 12-Oct-2021

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements