Computer >> Máy Tính >  >> Lập trình >> C ++

Hệ thống đề xuất tìm kiếm trong C ++

Giả sử chúng ta có một mảng các sản phẩm chuỗi và một chuỗi được gọi là searchWord. Chúng tôi muốn thiết kế một mô-đun gợi ý nhiều nhất ba tên sản phẩm từ danh sách sản phẩm sau khi mỗi ký tự của searchWord được nhập. Các sản phẩm được đề xuất phải có tiền tố chung với searchWord. Khi có nhiều hơn ba sản phẩm có tiền tố chung, trả về ba sản phẩm tối thiểu về mặt từ vựng. Vì vậy, chúng tôi phải tìm danh sách các sản phẩm được đề xuất sau khi mỗi ký tự của searchWord được nhập.

Nếu đầu vào là:["mobile", "mouse", "moneypot", "monitor", "mousepad"] và thesearchWord là "mouse", thì đầu ra sẽ là [["mobile", "moneypot", "monitor"], ["mobile", "moneypot", "monitor"], ["mouse", "mousepad"], ["mouse", "mousepad"], ["mouse", "mousepad"]]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định bản đồ m của khóa loại chuỗi và danh sách các giá trị chuỗi

  • sắp xếp mảng sản phẩm p

  • cho tôi trong phạm vi từ 0 đến kích thước của p - 1

    • x:=chuỗi trống

    • cho j trong phạm vi từ 0 đến độ dài của p [i] - 1

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

      • nếu độ dài m [x] <3, thì chèn p [i] vào danh sách m [x]

  • tạo ma trận chuỗi res, đặt temp:=chuỗi trống

  • cho tôi trong phạm vi từ 0 đến kích thước của s-1

    • temp:=temp + s [i]

    • chèn m [temp] vào res

  • trả lại res

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#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;
   }
};
main(){
   vector<string> v =
   {"mobile","mouse","moneypot","monitor","mousepad"};
   Solution ob;
   print_vector(ob.suggestedProducts(v, "mouse"));
}

Đầu vào

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

Đầu ra

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