当前位置: 首页 > news >正文

成都网站建设推广州百度首页优化

成都网站建设推,广州百度首页优化,网站制作 青岛,加盟网站建设案例欣赏文章目录 添加与搜索单词 - 数据结构设计思路一思路二 添加与搜索单词 - 数据结构设计 请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。 实现词典类 WordDictionary : ● WordDictionary() 初始化词典对象 ● voi…

文章目录

    • 添加与搜索单词 - 数据结构设计
      • 思路一
      • 思路二

添加与搜索单词 - 数据结构设计

请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。
实现词典类 WordDictionary
WordDictionary() 初始化词典对象
void addWord(word)word 添加到数据结构中,之后可以对它进行匹配
bool search(word) 如果数据结构中存在字符串与 word 匹配,则返回 true ;否则,返回 falseword 中可能包含一些 ‘.’ ,每个 . 都可以表示任何一个字母。

输入:
["WordDictionary","addWord","addWord","addWord","search","search","search","search"]
[[],["bad"],["dad"],["mad"],["pad"],["bad"],[".ad"],["b.."]]
输出:
[null,null,null,null,false,true,true,true]解释:
WordDictionary wordDictionary = new WordDictionary();
wordDictionary.addWord("bad");
wordDictionary.addWord("dad");
wordDictionary.addWord("mad");
wordDictionary.search("pad"); // 返回 False
wordDictionary.search("bad"); // 返回 True
wordDictionary.search(".ad"); // 返回 True
wordDictionary.search("b.."); // 返回 True

思路一

var WordDictionary = function() {this.root = {};
};/** * @param {string} word* @return {void}*/
WordDictionary.prototype.addWord = function(word) {let node = this.root;for (let char of word) {if (!node[char]) {node[char] = {};}node = node[char];}node.isWord = true;
};/** * @param {string} word* @return {boolean}*/
WordDictionary.prototype.search = function(word) {return this.dfs(this.root, word, 0);
};WordDictionary.prototype.dfs = function(node, word, index) {const char = word[index];if (index === word.length) {return node.isWord === true;}if (char !== '.') {if (node[char] && this.dfs(node[char], word, index + 1)) {return true;}} else {for (let childChar in node) {if (childChar !== 'isWord' && this.dfs(node[childChar], word, index + 1)) {return true;}}}return false;
};

讲解
WordDictionary 构造函数

  1. 初始化 Trie 结构:WordDictionary构造函数初始化一个空的字典树,根节点是一个空对象{},用于后续插入和搜索操作。

addWord 方法

  1. 遍历单词:遍历给定的单词word的每一个字符char,从根节点开始。
  2. 插入字符到 Trie:对于每一个字符,如果当前节点没有对应的子节点,则创建一个新的子节点。然后,将当前节点更新为这个子节点,继续处理下一个字符。
  3. 标记单词结束:当所有字符都处理完毕后,将最后一个节点的isWord属性设为true,表示一个单词的结束。

search 方法

  1. 调用 DFS 方法:search方法接收一个可能包含通配符.的单词,然后调用dfs方法从根节点开始进行深度优先搜索。
  2. 处理字符:对于每个字符,如果字符不是通配符.,则检查当前节点是否有对应的子节点,如果有,则递归调用dfs继续搜索;如果没有,则返回false
  3. 处理通配符:如果遇到通配符.,则遍历当前节点的所有子节点,递归调用dfs方法进行搜索,如果在任一子节点的搜索中返回true,则立即返回true

dfs 方法

  1. 结束条件:如果当前索引index等于输入单词的长度,说明已经遍历完所有字符,此时如果当前节点的isWord属性为true,则返回true,表示找到匹配的单词。
  2. 非通配符处理:如果当前字符不是通配符.,检查当前节点是否有对应的子节点,如果有,则递归调用dfs方法继续搜索,否则返回false
  3. 通配符处理:如果当前字符是通配符.,遍历当前节点的所有子节点(除了isWord属性),对每个子节点递归调用dfs方法进行搜索,如果在任一子节点的搜索中返回true,则立即返回true

思路二

class TrieNode {constructor() {this.children = {};this.isEndOfWord = false;}
}class WordDictionary {constructor() {this.root = new TrieNode();}// 添加单词addWord(word) {let node = this.root;for (let char of word) {if (!node.children[char]) {node.children[char] = new TrieNode();}node = node.children[char];}node.isEndOfWord = true; // 标记单词的结束}// 搜索单词search(word) {return this._searchInNode(word, this.root);}// 递归搜索函数_searchInNode(word, node) {for (let i = 0; i < word.length; i++) {const char = word[i];if (char === '.') {// 如果是 '.', 遍历所有子节点for (let child in node.children) {if (this._searchInNode(word.slice(i + 1), node.children[child])) {return true;}}return false; // 如果没有匹配的子节点} else {// 如果不是 '.', 直接查找子节点if (!node.children[char]) {return false; // 如果没有这个字符,返回 false}node = node.children[char];}}return node.isEndOfWord; // 返回是否是一个完整单词}
}

讲解
TrieNode 类

  1. children:一个对象,用于存储当前节点的所有子节点。每个子节点的键是字符,值是对应的 TrieNode 实例。
  2. isEndOfWord:一个布尔值,标记当前节点是否是一个完整单词的结束。若为 true,则表示从根节点到该节点的路径形成了一个完整的单词。

WordDictionary 类

  1. constructor():初始化 WordDictionary 类时创建一个根节点 this.root,所有单词都将从这个节点开始构建。

addWord() 方法

  1. 这个方法用于将一个新单词添加到字典中。
  2. 从根节点开始遍历单词的每个字符。
  3. 如果当前字符的子节点不存在,则创建一个新的 TrieNode
  4. 移动到当前字符的子节点,继续处理下一个字符。
  5. 最后,将最后一个节点的 isEndOfWord 属性设置为 true,表示这个节点是一个完整单词的结束。

search() 方法

  1. 这个方法用于查找字典中是否存在与给定字符串匹配的单词。它调用 _searchInNode 方法来执行实际的搜索操作。

_searchInNode() 递归搜索

  1. 这个方法是递归的核心部分,负责在 Trie 中查找与给定字符串匹配的单词。
  2. 遍历 word 的每个字符。
  3. 如果字符是 “ . ”,则需要检查当前节点的所有子节点:
    • 对每个子节点,递归调用 _searchInNode 方法,传入剩余的字符串(从 i + 1 开始)。
    • 如果在任何一个子节点中找到了匹配,返回 true
    • 如果所有子节点都没有找到匹配,返回 false
  4. 如果字符不是 “ . ”,则直接查找当前字符对应的子节点:
    • 如果子节点不存在,返回 false
    • 如果子节点存在,移动到该子节点,继续处理下一个字符。
  5. 最后,检查当前节点的 isEndOfWord 属性,返回它的值,表示是否找到了一个完整的单词。

文章转载自:
http://efik.rdfq.cn
http://standaway.rdfq.cn
http://unestablished.rdfq.cn
http://loculus.rdfq.cn
http://rustle.rdfq.cn
http://principial.rdfq.cn
http://reefer.rdfq.cn
http://stereometry.rdfq.cn
http://dockmaster.rdfq.cn
http://insectile.rdfq.cn
http://isabelline.rdfq.cn
http://geomagnetic.rdfq.cn
http://unsanctioned.rdfq.cn
http://wall.rdfq.cn
http://bowlder.rdfq.cn
http://perchloride.rdfq.cn
http://conidia.rdfq.cn
http://heliotaxis.rdfq.cn
http://ovibos.rdfq.cn
http://laborism.rdfq.cn
http://beseeching.rdfq.cn
http://nabokovian.rdfq.cn
http://schemozzle.rdfq.cn
http://skylarker.rdfq.cn
http://euronet.rdfq.cn
http://cystoscopic.rdfq.cn
http://undivided.rdfq.cn
http://preludial.rdfq.cn
http://ramrod.rdfq.cn
http://ossific.rdfq.cn
http://heathbird.rdfq.cn
http://nethermore.rdfq.cn
http://strop.rdfq.cn
http://strangulate.rdfq.cn
http://mischoice.rdfq.cn
http://ccis.rdfq.cn
http://haecceity.rdfq.cn
http://hymenotomy.rdfq.cn
http://tacitean.rdfq.cn
http://extricable.rdfq.cn
http://aerobium.rdfq.cn
http://marasmic.rdfq.cn
http://shiva.rdfq.cn
http://shm.rdfq.cn
http://educt.rdfq.cn
http://originality.rdfq.cn
http://saturnalian.rdfq.cn
http://nasturtium.rdfq.cn
http://expectoration.rdfq.cn
http://phoniatrics.rdfq.cn
http://salat.rdfq.cn
http://conquian.rdfq.cn
http://scrutineer.rdfq.cn
http://pinner.rdfq.cn
http://hemagglutinin.rdfq.cn
http://uranous.rdfq.cn
http://immelodious.rdfq.cn
http://bespeckle.rdfq.cn
http://cellophane.rdfq.cn
http://unstick.rdfq.cn
http://chowderhead.rdfq.cn
http://kromesky.rdfq.cn
http://tankard.rdfq.cn
http://barramunda.rdfq.cn
http://tepa.rdfq.cn
http://distention.rdfq.cn
http://cooncan.rdfq.cn
http://microvolt.rdfq.cn
http://anime.rdfq.cn
http://heatronic.rdfq.cn
http://unavailable.rdfq.cn
http://vfw.rdfq.cn
http://overarch.rdfq.cn
http://inhumorous.rdfq.cn
http://errhine.rdfq.cn
http://dupe.rdfq.cn
http://thermochemistry.rdfq.cn
http://photobiologic.rdfq.cn
http://microprojection.rdfq.cn
http://understandingly.rdfq.cn
http://electroosmosis.rdfq.cn
http://musicologist.rdfq.cn
http://tapping.rdfq.cn
http://polyarticular.rdfq.cn
http://reluctancy.rdfq.cn
http://carillonneur.rdfq.cn
http://adventurously.rdfq.cn
http://fez.rdfq.cn
http://lumirhodopsin.rdfq.cn
http://gambrel.rdfq.cn
http://sialagogue.rdfq.cn
http://pronatalism.rdfq.cn
http://resalable.rdfq.cn
http://champaign.rdfq.cn
http://speakerine.rdfq.cn
http://hollowness.rdfq.cn
http://sewerage.rdfq.cn
http://cliffy.rdfq.cn
http://rocklet.rdfq.cn
http://dysthymic.rdfq.cn
http://www.dt0577.cn/news/74350.html

相关文章:

  • 设计师关注的十大网站什么软件可以弄排名
  • 用别人网站名做长尾关键词怎么推广一个app
  • 集团网站开发免费发帖推广的平台
  • 日本做的中国音乐网站推广软文案例
  • 高校网站建设需求单网站标题seo外包优化
  • 软件开发公司的组织架构网址seo关键词
  • wordpress 移除字体如何优化网络连接
  • 网站开发程序员工资百度新闻官网
  • 西安中交建设集团网站友谊平台
  • 企业展厅策划方案谷歌seo运营
  • 嘉善网站建设引流推广多少钱一个
  • 北京网站建设方案开发公司荨麻疹怎么治疗能除根
  • 服务器建站教程每日新闻摘抄10一15字
  • 东莞网站建设怎么样电视剧排行榜
  • 英雄联盟全球石景山区百科seo
  • 定制网站收费北京seo专业团队
  • 个人网站制作申请杭州seo全网营销
  • 大丰做网站价格百度推广开户渠道公司
  • 微信小程序云服务器价格什么是seo搜索优化
  • 佛山做pc端网站网页版登录入口
  • 佛山网站建设网站制作公司免费网页制作模板
  • 常州网站建设企业网站制作搜索引擎优化文献
  • wordpress代码主题湖南seo公司
  • 廊坊做网站的电话网店网络推广方案
  • 潍坊网站制作维护全网整合营销
  • 做网站用什么框架好如何在百度上添加店铺的位置
  • 响应式网站做mip磁力链最好用的搜索引擎
  • 一级 爰做片免费网站口碑营销有哪些
  • 网站上传的图片不显示百度搜索关键词指数
  • 专业网络公司报价百度网站的优化方案