 
  Data Structure Data Structure
 Networking Networking
 RDBMS RDBMS
 Operating System Operating System
 Java Java
 MS Excel MS Excel
 iOS iOS
 HTML HTML
 CSS CSS
 Android Android
 Python Python
 C Programming C Programming
 C++ C++
 C# C#
 MongoDB MongoDB
 MySQL MySQL
 Javascript Javascript
 PHP PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Shortest Word Distance II in C++
Suppose there is a class that receives a list of words in the constructor, there will be a method that takes two words word1 and word2 and find the shortest distance between these two words in the list. That method will be called repeatedly many times with different parameters.
Let us assume that words = ["practice", "makes", "perfect", "skill", "makes"].
So, if the input is like word1 = “skill”, word2 = “practice”, then the output will be 3
To solve this, we will follow these steps −
- Define one map m 
-  The initializer takes an array of words -  for initialize i := 0, when i < size of words, update (increase i by 1), do − - insert i at the end of m[words[i]] 
 
 
-  
- Define a function shortest(), this will take word1, word2, 
- Define an array arr1 := m[word1] 
- Define an array arr2 := m[word2] 
- i := 0, j := 0 
- ret := infinity 
-  while (i < size of arr1 and j < size of arr2), do − - ret := minimum of ret and |arr1[i] - arr2[j]| 
-  if arr1[i] < arr2[j], then − - (increase i by 1) 
 
-  Otherwise - (increase j by 1) 
 
 
- return ret 
Example
Let us see the following implementation to get better understanding −
#include <bits/stdc++.h> using namespace std; class WordDistance { public:    unordered_map <string, vector <int< > m;    WordDistance(vector<string<& words) {       for(int i = 0; i < words.size(); i++){          m[words[i]].push_back(i);       }    }    int shortest(string word1, string word2) {       vector<int<& arr1 = m[word1];       vector<int<& arr2 = m[word2];       int i = 0;       int j = 0;       int ret = INT_MAX;       while (i < arr1.size() && j < arr2.size()) {          ret = min(ret, abs(arr1[i] - arr2[j]));          if (arr1[i] < arr2[j]) {             i++;          }          else             j++;       }       return ret;    } }; main(){    vector<string< v = {"practice", "makes", "perfect", "skill","makes"};    WordDistance ob(v);    cout << (ob.shortest("skill", "practice")) << endl;    cout << (ob.shortest("makes", "skill")); }  Input
{"practice", "makes", "perfect", "skill", "makes"} Call shortest("skill", "practice") Call shortest("makes", "skill") Output
3 1
