C语言 | Leetcode C语言题解之第211题添加与搜索单词-数据结构设计

题目:

题解:

cpp 复制代码
typedef struct WordDictionary_tag{
    struct WordDictionary_tag *next[26];
    bool finish;
} WordDictionary;

/** Initialize your data structure here. */

WordDictionary* wordDictionaryCreate() {
    WordDictionary *wd = (WordDictionary*) malloc(sizeof(WordDictionary));
    memset(wd->next, 0, sizeof(wd->next));
    wd->finish = false;
    return wd;
}

void wordDictionaryAddWord(WordDictionary* obj, char * word) {
    for (int i = 0; word[i]; i++){
        if (obj->next[word[i] - 'a']){
            obj = obj->next[word[i] - 'a'];
            continue;
        }
        obj->next[word[i] - 'a'] = (WordDictionary*) malloc(sizeof(WordDictionary));
        obj = obj->next[word[i] - 'a'];
        memset(obj->next, 0, sizeof(obj->next));
        obj->finish = false;
    }
    obj->finish = true;
}

bool wordDictionarySearch(WordDictionary* obj, char * word) {
    if (!obj){
        return false;
    }
    if (!word[0]){
        return obj->finish;
    }
    if (word[0] != '.'){
        return wordDictionarySearch(obj->next[word[0] - 'a'], word + 1);
    }
    for (int i = 0; i < 26; i++){
        if (wordDictionarySearch(obj->next[i], word + 1)){
            return true;
        }
    }
    return false;
}

void wordDictionaryFree(WordDictionary* obj) {
    for (int i = 0; i < 26; i++){
        if (obj->next[i]){
            wordDictionaryFree(obj->next[i]);
        }
    }
    free(obj);
}
相关推荐
尼尔森系3 小时前
排序与算法:希尔排序
c语言·算法·排序算法
冠位观测者4 小时前
【Leetcode 每日一题】624. 数组列表中的最大距离
数据结构·算法·leetcode
yadanuof4 小时前
leetcode hot100 滑动窗口&子串
算法·leetcode
GEEK.攻城狮4 小时前
使用VSCODE开发C语言程序
c语言·ide·vscode
武乐乐~4 小时前
欢乐力扣:旋转图像
算法·leetcode·职场和发展
Victoria.a5 小时前
数组和指针常见笔试题(深度剖析)
c语言·开发语言
a_j585 小时前
算法与数据结构(子集)
数据结构·算法·leetcode
xiaohai@Linux6 小时前
ESP32 在IDF_V5.3.1版本下实现AP无线热点模式!(带WIFI事件处理)
c语言·嵌入式硬件·tcp/ip·wifi·esp32
L_09077 小时前
【C】初阶数据结构6 -- 队列
c语言·开发语言·数据结构
charlie1145141917 小时前
(萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
c语言·stm32·单片机·嵌入式硬件·学习·教程