LeetCode //C - 1268. Search Suggestions System

You are given an array of strings products and a string searchWord.

Design a system that suggests at most three product names from products after each character of searchWord is typed. Suggested products should have common prefix with searchWord. If there are more than three products with a common prefix return the three lexicographically minimums products.

Return a list of lists of the suggested products after each character of searchWord is typed.

Example 1:

Input: products = "mobile","mouse","moneypot","monitor","mousepad", searchWord = "mouse"
Output: \["mobile","moneypot","monitor","mobile","moneypot","monitor","mouse","mousepad","mouse","mousepad","mouse","mousepad"]
Explanation: products sorted lexicographically = "mobile","moneypot","monitor","mouse","mousepad".

After typing m and mo all products match and we show user "mobile","moneypot","monitor".

After typing mou, mous and mouse the system suggests "mouse","mousepad".

Example 2:

Input: products = "havana", searchWord = "havana"
Output: \["havana","havana","havana","havana","havana","havana"]
Explanation: The only word "havana" will be always suggested while typing the search word.

Constraints:
  • 1 <= products.length <= 1000
  • 1 <= productsi.length <= 3000
  • 1 < = s u m ( p r o d u c t s i . l e n g t h ) < = 2 ∗ 1 0 4 1 <= sum(productsi.length) <= 2 * 10^4 1<=sum(productsi.length)<=2∗104
  • All the strings of products are unique.
  • productsi consists of lowercase English letters.
  • 1 <= searchWord.length <= 1000
  • searchWord consists of lowercase English letters.

From: LeetCode

Link: 1268. Search Suggestions System


Solution:

Ideas:
  1. Sort the products lexicographically to ensure we can easily pick the top three suggestions.
  2. Iterate through each character of searchWord, building the prefix to search in the sorted products.
  3. Search for products that match the current prefix.
  4. Store up to three matches for each prefix in the result list.
  5. Allocate memory dynamically for the result and intermediate lists, making sure to follow C conventions for memory management.
Caode:
c 复制代码
int cmp(const void* a, const void* b) {
    return strcmp(*(const char**)a, *(const char**)b);
}

char*** suggestedProducts(char** products, int productsSize, char* searchWord, int* returnSize, int** returnColumnSizes) {
    // Sort the products lexicographically
    qsort(products, productsSize, sizeof(char*), cmp);
    
    // Initialize the result array and sizes
    *returnSize = strlen(searchWord);
    char*** result = (char***)malloc(*returnSize * sizeof(char**));
    *returnColumnSizes = (int*)malloc(*returnSize * sizeof(int));
    
    for (int i = 0; i < *returnSize; i++) {
        result[i] = (char**)malloc(3 * sizeof(char*)); // At most 3 suggestions
        int count = 0; // Count of suggestions for this prefix
        for (int j = 0; j < productsSize && count < 3; j++) {
            if (strncmp(products[j], searchWord, i + 1) == 0) {
                result[i][count++] = products[j];
            }
        }
        (*returnColumnSizes)[i] = count; // Set the actual number of suggestions for this prefix
    }
    
    return result;
}
相关推荐
技术不好的崎鸣同学6 小时前
[ACTF2020 新生赛]Exec 思路及解法
算法·安全·web安全
Full Stack Developme7 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
Jerry9 小时前
LeetCode 707. 设计链表
算法
C语言小火车9 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
kebidaixu9 小时前
两轮BMS AFE SH367306 I2C 读写时序
算法
智能排队系统_头部供应商9 小时前
RK3588边缘网关改造银行排队系统实战
算法
东方佑9 小时前
临界分词的存在性与最优性:从统计临界态到神经语言模型的双语实证检验
人工智能·算法·语言模型
Fabarta9 小时前
从 0 实现 ChatGPT 风格的流式对话 UI
算法·架构
手写码匠10 小时前
手写 AI 上下文压缩系统:从零实现 Prompt 压缩与选择性上下文管理
人工智能·深度学习·算法·aigc