Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 검색 제안 시스템

<시간/>

제품 문자열 배열과 searchWord라는 문자열이 있다고 가정합니다. searchWord의 각 문자를 입력한 후 제품 목록에서 최대 3개의 제품 이름을 제안하는 모듈을 설계하려고 합니다. 제안된 제품에는 searchWord와 공통 접두사가 있어야 합니다. 공통 접두사가 있는 제품이 세 개 이상 있는 경우 사전순으로 최소 제품 세 개를 반환합니다. 따라서 searchWord의 각 문자를 입력한 후 제안된 제품 목록을 찾아야 합니다.

입력이 [ "mobile","mouse","moneypot","monitor","mousepad"]이고 searchWord가 "mouse"인 경우 출력은 [["mobile","moneypot", "모니터"],["모바일","moneypot","모니터"], ["마우스","마우스패드"], ["마우스","마우스패드"],["마우스","마우스패드"]]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 문자열 유형 키의 맵 m 및 문자열 값 목록 정의

  • 제품 배열 p

    정렬
  • 범위 0에서 p – 1까지의 i에 대해

    • x :=빈 문자열

    • 범위 0에서 p[i] – 1까지의 j에 대해

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

      • 길이가 m[x] <3이면 p[i]를 m[x] 목록에 삽입

  • 문자열의 행렬 생성 res, set temp :=empty string

  • 범위 0에서 s – 1까지의 i에 대해

    • 온도 :=온도 + s[i]

    • res

      에 m[temp] 삽입
  • 반환 해상도

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

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

입력

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

출력

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