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;
}
相关推荐
@Aurora.4 分钟前
数据结构手撕--【二叉树】
数据结构·算法
victd12 分钟前
什么是AutoRec?
算法
陈壮实的搬砖日记12 分钟前
抛硬币背后的秘密-通俗玩转二项分布
算法
前端 贾公子15 分钟前
力扣 83 . 删除排序链表中的重复元素:深入解析与实现
数据结构·算法
Y1nhl16 分钟前
力扣hot100_链表(3)_python版本
python·算法·leetcode·链表·职场和发展
oioihoii34 分钟前
C++23 中 constexpr 的重要改动
c++·算法·c++23
前端 贾公子40 分钟前
详解 LeetCode 第 242 题 - 有效的字母组
算法·leetcode·职场和发展
sofaraway131 小时前
【多目标进化算法】 MOEA/D算法(知识点)
算法
pystraf1 小时前
UOJ 228 基础数据结构练习题 Solution
数据结构·c++·算法·线段树
海底火旺1 小时前
破解二维矩阵搜索难题:从暴力到最优的算法之旅
javascript·算法·面试