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);
}
相关推荐
?abc!1 小时前
(哈希)128. 最长连续序列
算法·leetcode·哈希算法
C++ 老炮儿的技术栈1 小时前
C++实现手写strlen函数
大数据·c语言·c++·编辑器
岁忧2 小时前
(LeetCode 每日一题) 2016. 增量元素之间的最大差值 (数组)
java·c++·算法·leetcode·职场和发展·go
今日待办3 小时前
Arduino Nano 33 BLE Sense Rev 2开发板使用指南之【外设开发】
c语言·单片机·嵌入式硬件·mcu
AI+程序员在路上3 小时前
ABI与API定义及区别
c语言·开发语言·c++
森焱森3 小时前
驱动开发,队列,环形缓冲区:以GD32 CAN 消息处理为例
c语言·单片机·算法·架构
周方.4 小时前
191. 位1的个数
数据结构·算法·leetcode·链表·职场和发展
圣保罗的大教堂6 小时前
leetcode 1432. 改变一个整数能得到的最大差值 中等
算法·leetcode·职场和发展
Coding小公仔6 小时前
LeetCode 48. 旋转图像
算法·leetcode·职场和发展