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

Leetcode 208实现Trie树前缀

Leetcode 208实现Trie树前缀

一开始使用顺序遍历键值,运行时间太慢,后来修改为使用内置函数lower_bound, upper_bound 查找,速度提升很快;

// 查找前一个键的键值(即小于 k 的最大键)
auto lower = trieMap.lower_bound(k);
// 查找后一个键的键值(即大于 k 的最大键)
auto upper = trieMap.upper_bound(k);

注: 这里的查找均是采用二分查找方式
class Trie {
public:
	// 成员变量
	std::map<string, int> trieMap;
	

	Trie() {

	}

	void insert(string word) {
		trieMap[word] = 1;
	}

	bool search(string word) {
		return trieMap.count(word) == 1;
	}

	bool startsWith(string prefix) 
	{
		if (search(prefix))
			return true;
		string front;
		string back;
		// map内部就是二分查找,速度提高很大
		auto lower = trieMap.lower_bound(prefix);
		if (lower != trieMap.begin())
		{
			--lower;
			front = lower->first;
		}
		else {

		}
		auto upper = trieMap.upper_bound(prefix);
		if (upper != trieMap.end())
		{
			back = upper -> first;
		}
		else {

		}
		if (!front.empty() && front.find(prefix) == 0)
			return true;
		if (!back.empty() && back.find(prefix) == 0)
			return true;
		return false;
	}
};

http://www.kler.cn/a/442837.html

相关文章:

  • git: hint:use --reapply-cherry-picks to include skipped commits
  • JVM与Java体系结构
  • Conda虚拟Python环境下安装包遇到的坑
  • MVC执行流程
  • 下载并安装MySQL
  • HTTPS SSL/TLS 工作流程
  • iOS 核心动画
  • 【深入理解ApacheTomcat】
  • 数据结构和算法-06线段树-01
  • DOA估计算法——ESPRIT算法
  • mysql,创建数据库和用户授权核心语句
  • 使用 ts-node插件运行ts
  • C++的诗行:类与对象(中)
  • 关于IP代理API,我应该了解哪些功能特性?以及如何安全有效地使用它来隐藏我的网络位置?
  • 通过Canvas获得视频某一帧
  • Myabits的执行过程
  • Eureka控制中心:微服务控制的极速上手指南
  • WPF+MVVM案例实战与特效(四十一)-WPF文本到几何路径转换的艺术:轻松实现自定义字体路径生成
  • Linux: 通过/proc/pid/stack查看程序卡在内核的什么地方
  • Python 实现炸弹人游戏
  • 智星云技术文档:GPU测速教程
  • Java中基于TCP的Socket编程
  • API开发:Flask VS FastAPI
  • 基于RK3588机器人控制器+3D视觉传感器的送餐机器人解决方案
  • 网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取
  • 用 Python 格式化器重新定义用户体验