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;
}
相关推荐
荒古前18 分钟前
龟兔赛跑 PTA
c语言·算法
Colinnian22 分钟前
Codeforces Round 994 (Div. 2)-D题
算法·动态规划
用户00993831430128 分钟前
代码随想录算法训练营第十三天 | 二叉树part01
数据结构·算法
shinelord明31 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
დ旧言~38 分钟前
专题八:背包问题
算法·leetcode·动态规划·推荐算法
嵌入式科普1 小时前
十三、从0开始卷出一个新项目之瑞萨RZN2L串口DMA接收不定长
c语言·stm32·瑞萨·e2studio·rzn2l
_WndProc1 小时前
C++ 日志输出
开发语言·c++·算法
努力学习编程的伍大侠1 小时前
基础排序算法
数据结构·c++·算法
XiaoLeisj2 小时前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝