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, ],]

更新於:2020年5月2日

瀏覽量:284

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.