This is a repeat of the shortest word distance question.
#include <unordered_map> #include <string> #include <vector> #include <iostream> #include <climits> using namespace std; /* This is a follow up to Shortest Word Distance. The only difference is now you are given a list of words and your method will be called repeatly many times with different parameters. How would you optimize it? For example Assume that words = ["practice", "makes", "perfect", "coding", "makes"]; Given word1 = "coding", word2 = "practice", return 3. Given word1 = "makes", word2 = "coding", return 1. */ // I didn't follow the class statement. It should seperate the hashmap insertion from caculate distance. // since this methods will called many times. HashMap is useful then. int shorestDistance(vector<string>& words, string word1, string word2) { unordered_multimap<string, int> wordToIndex; int minDistance = INT_MAX; for(int i = 0; i < words.size(); ++i) { wordToIndex.insert({words[i], i}); auto iter_1 = wordToIndex.find(word1); auto iter_2 = wordToIndex.find(word2); if(iter_1 != wordToIndex.end() && iter_2 != wordToIndex.end()) { minDistance = min(minDistance, abs(iter_1->second - iter_2->second)); } } return minDistance; } int main(void) { vector<string> words{"practice", "makes", "perfect", "coding", "makes"}; int dis = shorestDistance(words, "makes", "coding"); cout << dis << endl; }