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

C++ में Search Suggestions System


मान लीजिए हमारे पास स्ट्रिंग्स की एक सरणी products और एक स्ट्रिंग searchWord है। हम एक मॉड्यूल डिज़ाइन करना चाहते हैं जो searchWord के प्रत्येक वर्ण को टाइप करने के बाद products सूची से अधिकतम तीन उत्पाद नामों का सुझाव देता है। सुझाए गए उत्पादों में searchWord के साथ सामान्य उपसर्ग होना चाहिए। जब सामान्य उपसर्ग वाले तीन से अधिक उत्पाद हों तो तीन लेक्सिकोग्राफिक रूप से न्यूनतम उत्पादों को लौटाएं। इसलिए हमें searchWord के प्रत्येक वर्ण को टाइप करने के बाद सुझाए गए उत्पादों की सूची ढूंढनी होगी।

यदि इनपुट है: ["mobile","mouse","moneypot","monitor","mousepad"], और searchWord "mouse" है, तो आउटपुट होगा [["mobile","moneypot","monitor"], ["mobile","moneypot","monitor"], ["mouse","mousepad"], ["mouse","mousepad"], ["mouse","mousepad"]]

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

  • स्ट्रिंग प्रकार की कुंजी और स्ट्रिंग मानों की सूची का एक मैप m परिभाषित करें

  • उत्पाद सरणी p को सॉर्ट करें

  • i को 0 से p के आकार - 1 तक के लिए

    • x := खाली स्ट्रिंग

    • j को 0 से p[i] की लंबाई - 1 तक के लिए

      • x := x + p[i, j]

      • यदि m[x] की लंबाई < 3, तो p[i] को m[x] सूची में सम्मिलित करें

  • स्ट्रिंग्स का एक मैट्रिक्स res बनाएं, temp := खाली स्ट्रिंग सेट करें

  • i को 0 से s के आकार - 1 तक के लिए

    • temp := temp + s[i]

    • m[temp] को res में सम्मिलित करें

  • res लौटाएं

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;

void print_vector(vector<vector<auto> > v) {
    cout << "[";
    for(int i = 0; i < v.size(); i++) {
        cout << "[";
        for(int j = 0; j < v[i].size(); j++) {
            cout << v[i][j] << ", ";
        }
        cout << "],";
    }
    cout << "]" << endl;
}

class Solution {
public:
    vector<vector<string>> suggestedProducts(vector<string>& p, string s) {
        map <string, vector < string > > m;
        sort(p.begin(), p.end());
        for(int i = 0; i < p.size(); i++) {
            string x = "";
            for(int j = 0; j < p[i].size(); j++) {
                x += p[i][j];
                if(m[x].size() < 3) m[x].push_back(p[i]);
            }
        }
        vector < vector <string> > res;
        string temp = "";
        for(int i = 0; i < s.size(); i++) {
            temp += s[i];
            res.push_back(m[temp]);
        }
        return res;
    }
};

int main() {
    vector<string> v = {"mobile","mouse","moneypot","monitor","mousepad"};
    Solution ob;
    print_vector(ob.suggestedProducts(v, "mouse"));
}

इनपुट

["mobile","mouse","moneypot","monitor","mousepad"] "mouse"

आउटपुट

[[mobile, moneypot, monitor, ],[mobile, moneypot, monitor, ],[mouse, mousepad, ],[mouse, mousepad, ],[mouse, mousepad, ],]
  1. - C++ में बाइनरी सर्च का उपयोग करके स्ट्रिंग खोजना

    स्ट्रिंग में बाइनरी सर्च में, हमें स्ट्रिंग्स का एक सॉर्टेड ऐरे दिया जाता है और हमें बाइनरी सर्च एल्गोरिदम का उपयोग करके स्ट्रिंग्स के ऐरे में एक स्ट्रिंग को खोजना होता है। उदाहरण इनपुट: stringArray = {I, Love, Programming, tutorials, point}. एलिमेंट = programming आउटपुट: स्ट्रिंग इंडेक्स 3 पर मिल

  1. - C++ में स्ट्रिंग को टोकनाइज़ करना

    इस खंड में, हम देखेंगे कि C++ में स्ट्रिंग्स को कैसे टोकनाइज़ किया जाए। C में हम कैरेक्टर सरणी के लिए strtok() फंक्शन का उपयोग कर सकते हैं। यहां हमारे पास एक स्ट्रिंग क्लास है। अब हम देखेंगे कि उस स्ट्रिंग से किसी डिलीमीटर का उपयोग करके स्ट्रिंग को कैसे काटा जाए। C++ सुविधा का उपयोग करने के लिए, हम

  1. - C++ में स्ट्रिंग को टोकनाइज़ कैसे करें?

    पहला तरीका शब्दों को स्पेस से अलग करके पढ़ने के लिए stringstream का उपयोग करना है। यह थोड़ा सीमित है लेकिन अगर आप उचित चेक प्रदान करते हैं तो यह कार्य काफी अच्छी तरह से करता है। उदाहरण #include <vector> #include <string> #include <sstream> using namespace std; int main() {