LeetCode-208 Implement Trie (Prefix Tree)

题目描述

Implement a trie with insertsearch, and startsWith methods.

 

题目大意

实现对一棵树的插入、搜索以及前序查找操作。

(树的每个节点代表一个小写字母,从根节点到叶节点代表一个完整的单词)

 

示例

E

Trie trie = new Trie();trie.insert("apple");
trie.search("apple");   // returns true
trie.search("app");     // returns false
trie.startsWith("app"); // returns true
trie.insert("app");   
trie.search("app");     // returns true

 

解题思路

感谢Leetcode@cxq1992提供的思路,采用较为工程化的方法完成树结点的记录保存与操作。

 

复杂度分析

时间复杂度:O(NULL)

空间复杂度:O(NULL)

 

代码

class node {
public:node() : val(' '), end(false), shared(0) {}node(char c) : val(c), end(false), shared(0) {}node* subchild(char c) {if(!child.empty()) {for(auto chi : child) {if(chi->val == c)return chi;}}return NULL;}~node() {for(auto chi : child)delete chi;}//该树结点所保存的小写字母char val;//该结点是否是叶节点bool end;//子节点的个数int shared;//子节点保存vector<node*> child;
};class Trie {
public:/** Initialize your data structure here. */Trie() {root = new node();}/** Inserts a word into the trie. */void insert(string word) {if(search(word))return;node* cur = root;for(char c : word) {node* tmp = cur->subchild(c);if(tmp == NULL) {tmp = new node(c);cur->child.push_back(tmp);cur = tmp;}else {cur = tmp;}++cur->shared;}cur->end = true;}/** Returns if the word is in the trie. */bool search(string word) {node* tmp = root;for(char c : word) {tmp = tmp->subchild(c);if(tmp == NULL)return false;}return tmp->end;}/** Returns if there is any word in the trie that starts with the given prefix. */bool startsWith(string prefix) {node* tmp = root;for(char c : prefix) {tmp = tmp->subchild(c);if(tmp == NULL)return false;}return true;}private:node* root;
};/*** Your Trie object will be instantiated and called as such:* Trie* obj = new Trie();* obj->insert(word);* bool param_2 = obj->search(word);* bool param_3 = obj->startsWith(prefix);*/

 

转载于:https://www.cnblogs.com/heyn1/p/11016344.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react组件生命周期_React组件生命周期-挂钩/方法介绍

react组件生命周期React components have several lifecycle methods that you can override to run your code at a particular time in the process.React组件具有几种生命周期方法&#xff0c;您可以重写它们以在流程中的特定时间运行代码。 In this video, Nick Karnik de…

(马世龙)Linux下CACTI完全搭建技术文档二

续&#xff08;马世龙&#xff09;Linux下CACTI完全搭建技术文档一 6.完成cacti的安装1. 首先检查一下rra/下面&#xff0c;有没有数据2. snmpwalk -v 2c -c public ServerIP if 用来测试被控对象(serverIP)是否开启了SNMP服务3. snmpwalk -v 2c ServerIP -c public .1.3.6.1.4…

项目经理如何管理情绪?这三本书管理书籍你必须要看

本文主要是介绍三本管理的书籍&#xff0c;需要全部书籍的可以加Q群375508415去拿走。里面很多大神的PMP资料。 大家有没有觉得项目经理有时像个政委&#xff0c;做员工思想工作&#xff1b; 有时像个HR&#xff0c;操心员工的稳定和发展&#xff1b; 有时像个咨询顾问&#xf…

java 外部接口调用 设计模式_《Java设计模式》之接口模式

-----------模式是思想的体现&#xff0c;而非具体的实现。抽象的讲&#xff0c;类的接口是类允许其他类对象访问的方法与字段集。接口通常代表一种承诺&#xff0c;即方法需要实现接口方法名表示的操作&#xff0c;遵循代码注释和其他文档说明&#xff0c;类的实现就是方法体中…

BFS(广度优先搜索)

Catch That Cow Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer …

leetcode111. 二叉树的最小深度(队列)

给定一个二叉树&#xff0c;找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回它的最小深度 2.代码 /*** Definition for a binary tree no…

企业网站6个常见的优化漏洞

导读&#xff1a;企业做营销网站目的&#xff0c;就是希望通过网络营销&#xff0c;挖掘目标客户。目标客户怎么来&#xff0c;那就需要通过网站优化&#xff0c;把网站关键词优化排名到首页&#xff0c;这样才能更多的机会被潜在客户点击。很多企业网站上线之前&#xff0c;没…

aspx 微型_最初的十亿分钟:正在向世界授课的微型非营利组织背后的数字

aspx 微型by Quincy Larson昆西拉尔森(Quincy Larson) 最初的十亿分钟&#xff1a;正在向世界授课的微型非营利组织背后的数字 (The First Billion Minutes: The Numbers Behind the Tiny Nonprofit That’s Teaching the World to Code) People have now spent more than 1 b…

[RN] React Native 自定义导航栏随滚动渐变

React Native 自定义导航栏随滚动渐变 实现效果预览&#xff1a; 代码实现&#xff1a; 1、定义导航栏 NavPage.js import React, {Component} from react; import {View, Text, Image, StyleSheet, TouchableOpacity, Platform, Dimensions} from react-native;/*** 自定义导航…

【CSS 技能提升】 :before和:after的使用

前几天的晚上较全面的去看了下css的一些文档和资料&#xff0c;大部分的样式运用都没什么大问题了&#xff0c;只是有些许较陌生&#xff0c;但是也知道他们的存在和实现的是什么样式。今天主要想在这篇学习笔记中写的也不多&#xff0c;主要是针对:before和:after写一些内容&a…

c语言模拟java面向对象_纯c语言实现面向对象分析与示例分享

#include #include //接口#ifndef Interface#define Interface struct#endif//类#ifndef Class#define Class struct#endif//抽象形状类Class Shape;typedef Class Shape shape;//抽象形状类的方法声明shape* Shape(int edges);int shape_getEdges(shape *);int shape_getArea(…

leetcode152. 乘积最大子数组

给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 代码 class Solution {publi…

成功试验基于C#/.NET的Android开发

今天最开心事情莫过于摸索验证了一个事情&#xff0c;C#也能进行Android和IOS开发&#xff0c;白天安装了开发环境&#xff0c;晚上进行测试&#xff0c;直到此时此刻&#xff0c;已经成功的导出一款基于C#/.NET的安卓APK&#xff0c;并且能够成功的导入到安卓手机运行&#xf…

使用机器学习预测天气_如何使用机器学习根据文章标题预测喜欢和分享

使用机器学习预测天气by Flavio H. FreitasFlavio H.Freitas着 如何使用机器学习根据文章标题预测喜欢和分享 (How to predict likes and shares based on your article’s title using Machine Learning) Choosing a good title for an article is an important step in the …

深入理解了MySQL,你才能说熟悉数据库

先抛出几个问题 1.为什么不建议使用订单号作为主键?2.为什么要在需要排序的字段上加索引?3.for update 的记录不存在会导致锁住全表?4.redolog 和 binlog 有什么区别?5.MySQL 如何回滚一条 sql ?6.char(50) 和 varchar(50) 效果是一样的么?索引知识回顾 对于 MySQL 数据库…

ibatis mysql 自增_mybatis自增主键

简单介绍&#xff1a;在使用mybats插入数据是&#xff0c;有很多需要和id关联的其他数据&#xff0c;所以在插入一条信息时获取其主键信息是很常见的操作。一 mysql数据库的主键自增(int类型的主键)1 创建一个表&#xff0c;设置表的id(此id必须是int类型)&#xff0c;设置为au…

DataGridView控件用法二:常用属性

通常会设置的DataGridView的属性如下&#xff1a; AllowUserToAddRows - False指示是否向用户显示用于添加行的选项&#xff0c;列标题下面的一行空行将消失。一般让其消失。AllowUserToDeleteRows - False指示是否允许用户从DataGridView删除行。一般不允许。AllowUserToOrder…

leetcode面试题 16.21. 交换和(二分查找)

给定两个整数数组&#xff0c;请交换一对数值&#xff08;每个数组中取一个数值&#xff09;&#xff0c;使得两个数组所有元素的和相等。 返回一个数组&#xff0c;第一个元素是第一个数组中要交换的元素&#xff0c;第二个元素是第二个数组中要交换的元素。若有多个答案&…

谈谈IP和MAC捆绑的破解之道

来源:[url]http://l-y.vicp.net[/url]我们学校最近将MAC和IP进行了捆绑&#xff0c;又在服务器&#xff08;2K&#xff09;上进行了上网时间的限制&#xff0c;真是烦死人了&#xff0c;我想我可是一个从不受限制的人啊&#xff0c;怎么可以就这样束手就擒呢&#xff01;古话说…

如何在JavaScript中区分深层副本和浅层副本

by Lukas Gisder-Dub卢卡斯吉斯杜比(LukasGisder-Dub) 如何在JavaScript中区分深层副本和浅层副本 (How to differentiate between deep and shallow copies in JavaScript) New is always better!新总是更好&#xff01; You have most certainly dealt with copies in Java…