मान लीजिए हमारे पास शब्दों की एक सूची है और दो अन्य शब्द word1 और word2 हैं, हमें सूची में इन दो शब्दों के बीच की सबसे छोटी दूरी ढूंढनी है। यहाँ word1 और word2 समान हो सकते हैं और वे सूची में दो अलग-अलग शब्दों को दर्शाते हैं। मान लीजिए words = ["practice", "makes", "perfect", "skill", "makes"]।
इसलिए, यदि इनपुट है word1 = "makes", word2 = "skill", तो आउटपुट 1 होगा।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
ret := 10^9, l1 := 10^9, l2 := -10^9
n := words का आकार
i := 0 से शुरू करें, जब i < n, i बढ़ाते हुए, करें -
यदि words[i] word1 के समान है, तो -
l1 := i
यदि words[i] word2 के समान है, तो -
यदि word1 word2 के समान है, तो -
l1 := l2
l2 := i
ret := min(|l2 - l1|, ret)
ret लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; class Solution { public: int shortestWordDistance(vector<string>& words, string word1, string word2) { int ret = 1e9; int l1 = 1e9; int l2 = -1e9; int n = words.size(); for (int i = 0; i < n; i++) { if (words[i] == word1) { l1 = i; } if (words[i] == word2) { if (word1 == word2) { l1 = l2; } l2 = i; } ret = min(abs(l2 - l1), ret); } return ret; } }; main(){ Solution ob; vector<string> v = {"practice", "makes", "perfect", "skill", "makes"}; cout << (ob.shortestWordDistance(v, "makes", "skill")); }इनपुट
{"practice", "makes", "perfect", "skill", "makes"},"makes", "skill"आउटपुट
1