C++ 搜尋建議系統
假設我們有一個字串陣列 `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;
}
};
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, ],]
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP