当前位置:网站首页>【C语言刷LeetCode】676. 实现一个魔法字典(M)
【C语言刷LeetCode】676. 实现一个魔法字典(M)
2022-07-16 14:39:00 【kinbo88】
【
设计一个使用单词列表进行初始化的数据结构,单词列表中的单词 互不相同 。 如果给出一个单词,请判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。
实现 MagicDictionary 类:
MagicDictionary() 初始化对象
void buildDict(String[] dictionary) 使用字符串数组 dictionary 设定该数据结构,dictionary 中的字符串互不相同
bool search(String searchWord) 给定一个字符串 searchWord ,判定能否只将字符串中 一个 字母换成另一个字母,使得所形成的新字符串能够与字典中的任一字符串匹配。如果可以,返回 true ;否则,返回 false 。
示例:
输入
["MagicDictionary", "buildDict", "search", "search", "search", "search"]
[[], [["hello", "leetcode"]], ["hello"], ["hhllo"], ["hell"], ["leetcoded"]]
输出
[null, null, false, true, false, false]
解释
MagicDictionary magicDictionary = new MagicDictionary();
magicDictionary.buildDict(["hello", "leetcode"]);
magicDictionary.search("hello"); // 返回 False
magicDictionary.search("hhllo"); // 将第二个 'h' 替换为 'e' 可以匹配 "hello" ,所以返回 True
magicDictionary.search("hell"); // 返回 False
magicDictionary.search("leetcoded"); // 返回 False
提示:
1 <= dictionary.length <= 100
1 <= dictionary[i].length <= 100
dictionary[i] 仅由小写英文字母组成
dictionary 中的所有字符串 互不相同
1 <= searchWord.length <= 100
searchWord 仅由小写英文字母组成
buildDict 仅在 search 之前调用一次
最多调用 100 次 search
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/implement-magic-dictionary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
】
刚开始想复杂,以为要用UTHASH,但题目说了buildDict 仅在 search 之前调用一次,那么字典就是固定的了,不用后面还要添加,这就大大简化题目了。所以结构体定义时,直接一个二维数组指向单词数组就行了。
一个单词变化几位就变成另一个单词,即两个单词按照位比只差几位。
typedef struct {
char **words;
int size;
} MagicDictionary;
MagicDictionary* magicDictionaryCreate() {
MagicDictionary *obj = (MagicDictionary *)malloc(sizeof(MagicDictionary));
return obj;
}
void magicDictionaryBuildDict(MagicDictionary* obj, char ** dictionary, int dictionarySize) {
obj->words = dictionary;
obj->size = dictionarySize;
}
bool magicDictionarySearch(MagicDictionary* obj, char * searchWord) {
int len = strlen(searchWord);
int i, j;
// 遍历字典中每一个字符
for (i = 0; i < obj->size; i++) {
int objlen = strlen(obj->words[i]);
if (objlen != len) {
continue; // 如果长度都不一致,就不用比了
}
int diff = 0;
for (j = 0; j < len; j++) {
if (obj->words[i][j] != searchWord[j]) { // 比较单词的每一位
diff++;
}
if (diff > 1) {
break; // 如果单词的位数超过两个不一致,就开始比较下一个单词了
}
}
if (diff == 1) { // 到这里diff=1表示满足题意可以返回true了
return true;
}
}
return false; // 到这里肯定是不满足题意的,否则前面就返回了
}
void magicDictionaryFree(MagicDictionary* obj) {
free(obj);
}
/*
注意点:
1. ‘能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中’
即 两个单词比较只有一个字符不同。
2. buildDict 只构建一次,然后不会变了。这个隐藏条件能简化题目
3. 结构体定义一个二维指针,直接指向dictionary就行了
*/
边栏推荐
猜你喜欢

zabbix 监控服务 (四)配置触发器

STM32 - timer interrupt experiment

【Ucos-III源码分析】——软件定时器

Leetcode45. 跳跃游戏 II

An article explains unsupervised learning in images in detail
![[product people Wei Peng] 13 design websites necessary for product people in 2022 (version 1.0)](/img/cc/42319151a248b40713d9d441708ff6.png)
[product people Wei Peng] 13 design websites necessary for product people in 2022 (version 1.0)

MySQL super detailed installation tutorial will teach you to install Mysql to use the simplest MySQL installation method of MySQL. This method is also simple to install and uninstall

Leetcode 49. 字母异位词分组

Error :Could not decode ...With “UTF-8“-encoding. Editing not possible

ImportError: DLL load failed: 找不到指定的模块。
随机推荐
递归优化之缓存结果(js)
动态内存管理(C语言)详细总结
zabbix 监控服务 (四)配置触发器
特征值和特征向量的求法
对象序列化流与反序列化流
c语言指针与数组的深入理解
Preparing transaction:done Verifying transaction:failed RemoveError:‘requests‘ is a dependency of **
深圳某游戏研发公司给每个工位都装监控,网友:堪比坐牢!
Kaggle文件下载(权重、推理文件...)
[玩转ES] ES批量/全量导入数据
剑指 Offer 52. 两个链表的第一个公共节点
图扑软件构建源网荷储用体系 打造循环经济2.0版本
腾讯四面面经,问傻了
STM32——定时器中断实验
服装ERP怎么选?选型时一定要问这些问题
STM32 - timer interrupt experiment
三种“榨干”企业装置服装ERP预算的情况
js二分查找伪代码
论文翻译解读:learning logic rules for reasoning on knowledge graphs【RNNLogic】
要做的事情