Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में सबसे छोटा शब्द दूरी II


मान लीजिए एक क्लास है जो कंस्ट्रक्टर में शब्दों की सूची प्राप्त करती है, इसमें एक मेथड होगा जो दो शब्द word1 और word2 लेगा और सूची में इन दो शब्दों के बीच की सबसे छोटी दूरी ढूंढेगा। वह मेथड अलग-अलग पैरामीटर्स के साथ बार-बार कई बार कॉल किया जाएगा।

मान लीजिए words = ["practice", "makes", "perfect", "skill", "makes"]।

इसलिए, यदि इनपुट है word1 = "skill", word2 = "practice", तो आउटपुट 3 होगा।

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:

  • एक मैप m परिभाषित करें

  • इनिशियलाइज़र शब्दों का ऐरे लेता है

    • i := 0 से शुरू करें, जब i < words का आकार, i बढ़ाते हुए, करें -

      • i को m[words[i]] के अंत में डालें

  • एक फ़ंक्शन shortest() परिभाषित करें, जो word1, word2 लेगा,

  • एक ऐरे arr1 := m[word1] परिभाषित करें

  • एक ऐरे arr2 := m[word2] परिभाषित करें

  • i := 0, j := 0

  • ret := इन्फिनिटी

  • जब (i < arr1 का आकार और j < arr2 का आकार), करें -

    • ret := min(ret, |arr1[i] - arr2[j]|)

    • यदि arr1[i] < arr2[j], तो -

      • (i को 1 से बढ़ाएं)

    • अन्यथा

      • (j को 1 से बढ़ाएं)

  • ret लौटाएं

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#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")); }

इनपुट

{"practice", "makes", "perfect", "skill", "makes"} Call shortest("skill", "practice") Call shortest("makes", "skill")

आउटपुट

3 1

  1. - C++ में वन एडिट डिस्टेंस

    मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं; हमें जांचना है कि क्या वे दोनों वन एडिट डिस्टेंस पर हैं। वन एडिट डिस्टेंस के तीन प्रकार हैं:s में एक कैरेक्टर डालकर t प्राप्त करनाs से एक कैरेक्टर हटाकर t प्राप्त करनाs के एक कैरेक्टर को बदलकर t प्राप्त करनाइसलिए, यदि इनपुट है s = ab, t = acb, तो आउटपुट

  1. - C++ में सबसे छोटा बहुसंख्यक उपस्ट्रिंग (Shortest Majority Substring)

    लोअरकेस स्ट्रिंग s दी गई है। न्यूनतम लंबाई (कम से कम 2) का उपस्ट्रिंग ढूंढें जिसमें कोई वर्ण अन्य सभी वर्णों के योग से अधिक बार आता हो। ऐसा न होने पर -1 वापस करें। मुख्य अवलोकन: उत्तर केवल 2 या 3 हो सकता है। लंबाई 2: दो समान आसन्न वर्ण (जैसे aa)। लंबाई 3: पैटर्न aba। उदाहरण: abbbcde → bb लंबाई 2 →

  1. C++ में BK ट्री परिचय C++ में BK ट्री परिचय

    BK ट्री या बर्कहार्ड ट्री (Burkhard tree) एक प्रकार की डेटा संरचना है जिसका उपयोग आमतौर पर लेवेंश्टाइन दूरी (Levenshtein distance) के आधार पर स्पेल चेक करने के लिए किया जाता है। इसका उपयोग स्ट्रिंग मिलान के लिए ऑटोकरेक्ट फीचर बनाने के लिए भी किया जाता है। मान लें कि हमारे पास एक डिक्शनरी में कुछ शब