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);
}
相关推荐
Nuyoah11klay1 小时前
华清远见25072班C语言学习day7
c语言·排序算法
点灯的棉羊1 小时前
从C学C++(10)-string/vector/map的简单使用
c语言·c++
再睡一夏就好2 小时前
【排序算法】⑦归并排序
c语言·数据结构·算法·排序算法·学习笔记
用户6120414922133 小时前
C语言做的单词背诵测试器
c语言·后端·敏捷开发
夏天ccys3 小时前
LeetCode Day5 -- 栈、队列、堆
算法·leetcode···队列
茴香豆的茴112 小时前
转码刷 LeetCode 笔记[2]:203. 移除链表元素(python)
笔记·leetcode·链表
晨非辰13 小时前
#C语言——刷题攻略:牛客编程入门训练(六):运算(三)-- 涉及 辗转相除法求最大公约数
c语言·开发语言·经验分享·学习·学习方法·visual studio
遇见尚硅谷16 小时前
C语言:单链表学习
java·c语言·学习
玄月初二丶16 小时前
C语言变量的声明和定义有什么区别?
c语言·开发语言·变量
快去睡觉~19 小时前
力扣109:有序链表转换二叉搜索树
算法·leetcode·链表