제품 문자열 배열과 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, ],]