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 <= products[i].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(products[i].length) <= 2 * 10^4 1<=sum(products[i].length)<=2∗104
  • All the strings of products are unique.
  • products[i] 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 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好6 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅6 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
jolimark7 小时前
C语言自学攻略:小白入门三步走
c语言·编程入门·学习路线·实践项目·自学攻略
cen__y8 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
社交怪人8 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
x_yeyue9 小时前
三角形数
笔记·算法·数论·组合数学
卢锡荣9 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
念何架构之路10 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星10 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi